Редакция 159 | Редакция 187 | К новейшей редакции | Только различия | Не учитывать пробелы | Содержимое файла | Авторство | Последнее изменение | Открыть журнал | RSS
Редакция 159 | Редакция 179 | ||
---|---|---|---|
1 | #include "mymodel.h"
|
1 | #include "mymodel.h"
|
2 | 2 | ||
3 | MyModel::MyModel(QObject *parent) : |
3 | MyModel::MyModel(QObject *parent) : |
4 | QSqlTableModel(parent) |
4 | QSqlTableModel(parent) |
5 | {
|
5 | {
|
6 | setEditStrategy(QSqlTableModel::OnManualSubmit); |
6 | setEditStrategy(QSqlTableModel::OnManualSubmit); |
7 | }
|
7 | }
|
8 | 8 | ||
9 | Qt::ItemFlags MyModel::flags( |
9 | Qt::ItemFlags MyModel::flags( |
10 | const QModelIndex &index) const { |
10 | const QModelIndex &index) const { |
11 | Qt::ItemFlags flags = QSqlTableModel::flags(index); |
11 | Qt::ItemFlags flags = QSqlTableModel::flags(index); |
12 | 12 | ||
- | 13 | ||
- | 14 | ||
- | 15 | ||
13 | /***********************************************
|
16 | /***********************************************
|
14 | 17 | ||
15 | if ((index.column() != 3) && (index.column() != 0))
|
18 | if ((index.column() != 3) && (index.column() != 0))
|
16 | flags |= Qt::ItemIsEditable;
|
19 | flags |= Qt::ItemIsEditable;
|
17 | //if (index.column() == 4)
|
20 | //if (index.column() == 4)
|
18 | // flags |= Qt::ItemIsUserCheckable;
|
21 | // flags |= Qt::ItemIsUserCheckable;
|
19 | else
|
22 | else
|
20 | {
|
23 | {
|
21 | if ((index.column() == 3) || (index.column() == 0)) flags &= ~Qt::ItemIsEditable; // çàïðåùàåì ðåäàêòèðîâàíèå òðåòüåãî ñòîëáöà
|
24 | if ((index.column() == 3) || (index.column() == 0)) flags &= ~Qt::ItemIsEditable; // çàïðåùàåì ðåäàêòèðîâàíèå òðåòüåãî ñòîëáöà
|
22 | }
|
25 | }
|
23 | 26 | ||
24 | *************************************************/
|
27 | *************************************************/
|
25 | 28 | ||
26 | if (bolleans_list.indexOf(index.column()) != -1) |
29 | if (bolleans_list.indexOf(index.column()) != -1) |
27 | {
|
30 | {
|
28 | flags |= Qt::ItemIsUserCheckable; // åñëè â ñòîëáöå òèï "BOOL", äåëàåì åãî âèáèðàåìûì |
31 | flags |= Qt::ItemIsUserCheckable; // åñëè â ñòîëáöå òèï "BOOL", äåëàåì åãî âèáèðàåìûì |
29 | //flags |= Qt::ItemIsEnabled;
|
32 | //flags |= Qt::ItemIsEnabled;
|
30 | flags &= ~Qt::ItemIsEditable; |
33 | flags &= ~Qt::ItemIsEditable; |
31 | }
|
34 | }
|
32 | 35 | ||
33 | return flags; // òåêóùèé ñòîëáåö |
36 | return flags; // òåêóùèé ñòîëáåö |
34 | 37 | ||
35 | 38 | ||
36 | }
|
39 | }
|
37 | 40 | ||
38 | 41 | ||
39 | bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role) { |
42 | bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role) { |
40 | //// if (index.column()==3) return false; // â òðåòüåé êîëîíêå íå äàåì ïîìåíÿòü çíà÷åíèå
|
43 | //// if (index.column()==3) return false; // â òðåòüåé êîëîíêå íå äàåì ïîìåíÿòü çíà÷åíèå
|
41 | bool lResult = false; |
44 | bool lResult = false; |
42 | 45 | ||
43 | /*
|
46 | /*
|
44 | QString str_tmp;
|
47 | QString str_tmp;
|
45 | if (index.column()==1) { // åñëè ìåíÿåì èìÿ êëàññà
|
48 | if (index.column()==1) { // åñëè ìåíÿåì èìÿ êëàññà
|
46 | str_tmp = value.toString(); // òî ïîìåíÿåì è èìÿ òàáëèöû
|
49 | str_tmp = value.toString(); // òî ïîìåíÿåì è èìÿ òàáëèöû
|
47 | str_tmp.append(tr(" instance"));
|
50 | str_tmp.append(tr(" instance"));
|
48 | }
|
51 | }
|
49 | */
|
52 | */
|
50 | /*
|
53 | /*
|
51 | QString str_tmp;
|
54 | QString str_tmp;
|
52 | if (index.column()==0) { // åñëè ìåíÿåì èìÿ êëàññà
|
55 | if (index.column()==0) { // åñëè ìåíÿåì èìÿ êëàññà
|
53 | str_tmp = value.toString(); // òî ïîìåíÿåì è èìÿ òàáëèöû
|
56 | str_tmp = value.toString(); // òî ïîìåíÿåì è èìÿ òàáëèöû
|
54 | str_tmp.append(tr("_instance"));
|
57 | str_tmp.append(tr("_instance"));
|
55 | }
|
58 | }
|
56 | */
|
59 | */
|
57 | 60 | ||
58 | 61 | ||
59 | // MyModel::record(index.row());
|
62 | // MyModel::record(index.row());
|
60 | 63 | ||
61 | 64 | ||
62 | 65 | ||
63 | if (bolleans_list.indexOf(index.column()) != -1) { |
66 | if (bolleans_list.indexOf(index.column()) != -1) { |
64 | // QModelIndex newindex;
|
67 | // QModelIndex newindex;
|
65 | // QSqlRecord rec = record(index.row());
|
68 | // QSqlRecord rec = record(index.row());
|
66 | // bool chk = (value.toInt()==Qt::Checked);
|
69 | // bool chk = (value.toInt()==Qt::Checked);
|
67 | // rec.setValue(index.column(),chk);
|
70 | // rec.setValue(index.column(),chk);
|
68 | // rec.setValue(index.column(), value);
|
71 | // rec.setValue(index.column(), value);
|
69 | // rec.setGenerated(index.column(), true);
|
72 | // rec.setGenerated(index.column(), true);
|
70 | 73 | ||
71 | //lResult = QSqlTableModel::setData(index, value, role);
|
74 | //lResult = QSqlTableModel::setData(index, value, role);
|
72 | 75 | ||
73 | // lResult = updateRowInTable(index.row(), rec);
|
76 | // lResult = updateRowInTable(index.row(), rec);
|
74 | // lResult = setRecord(index.row(),rec); // âåðíåì ðåçóëüòàò îá óñòàíîâêå
|
77 | // lResult = setRecord(index.row(),rec); // âåðíåì ðåçóëüòàò îá óñòàíîâêå
|
75 | 78 | ||
76 | /*
|
79 | /*
|
77 | QStandardItem* item = static_cast<QStandardItem*>(index.internalPointer());
|
80 | QStandardItem* item = static_cast<QStandardItem*>(index.internalPointer());
|
78 | Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
|
81 | Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
|
79 | item->setCheckState(state);
|
82 | item->setCheckState(state);
|
80 | 83 | ||
81 | */
|
84 | */
|
82 | 85 | ||
83 | 86 | ||
84 | lResult = QSqlTableModel::setData(index, value, Qt::EditRole); |
87 | lResult = QSqlTableModel::setData(index, value, Qt::EditRole); |
85 | 88 | ||
86 | // Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
|
89 | // Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
|
87 | // lResult = QSqlTableModel::setData(index, value.toBool(), Qt::CheckStateRole);
|
90 | // lResult = QSqlTableModel::setData(index, value.toBool(), Qt::CheckStateRole);
|
88 | 91 | ||
89 | // QSqlTableModel::setItemData(index,Qt::CheckStateRole);
|
92 | // QSqlTableModel::setItemData(index,Qt::CheckStateRole);
|
90 | // lResult = QSqlTableModel::setData(index, value, role);
|
93 | // lResult = QSqlTableModel::setData(index, value, role);
|
91 | 94 | ||
92 | // emit MyModel::dataChanged(index, index);
|
95 | // emit MyModel::dataChanged(index, index);
|
93 | 96 | ||
94 | // MyModel::updateRowInTable();
|
97 | // MyModel::updateRowInTable();
|
95 | // lResult = QSqlTableModel::setData(index, value, Qt::DisplayRole);
|
98 | // lResult = QSqlTableModel::setData(index, value, Qt::DisplayRole);
|
96 | // QSqlTableModel::setData(index, value, Qt::CheckStateRole);
|
99 | // QSqlTableModel::setData(index, value, Qt::CheckStateRole);
|
97 | MyModel::submitAll(); |
100 | MyModel::submitAll(); |
98 | ////// // MyModel::select();
|
101 | ////// // MyModel::select();
|
99 | // MyModel::data(index, Qt::DisplayRole);
|
102 | // MyModel::data(index, Qt::DisplayRole);
|
100 | }
|
103 | }
|
101 | 104 | ||
102 | else
|
105 | else
|
103 | {
|
106 | {
|
104 | lResult = QSqlTableModel::setData(index, value, role); |
107 | lResult = QSqlTableModel::setData(index, value, role); |
105 | }
|
108 | }
|
106 | 109 | ||
107 | 110 | ||
108 | return lResult; |
111 | return lResult; |
109 | 112 | ||
110 | 113 | ||
111 | 114 | ||
112 | 115 | ||
113 | 116 | ||
114 | }
|
117 | }
|
115 | 118 | ||
116 | 119 | ||
117 | 120 | ||
118 | QVariant MyModel::data(const QModelIndex &index, int role) const { |
121 | QVariant MyModel::data(const QModelIndex &index, int role) const { |
119 | 122 | ||
120 | QHash<int, bool> check; |
123 | QHash<int, bool> check; |
121 | QVariant value = QSqlTableModel::data(index, role); |
124 | QVariant value = QSqlTableModel::data(index, role); |
122 | QList <int> keys; |
125 | QList <int> keys; |
123 | QStringList values;
|
126 | QStringList values;
|
124 | keys = pointers_map.keys(); // ñïèñîê ñòîëáöîâ ñ óêàçàòåëÿìè |
127 | keys = pointers_map.keys(); // ñïèñîê ñòîëáöîâ ñ óêàçàòåëÿìè |
125 | values = pointers_map.values(); // ñïèñîê òàáëèö-õðàíèëèù îáúåêòîâ ðîäèòåëüñêèõ êëàññîâ |
128 | values = pointers_map.values(); // ñïèñîê òàáëèö-õðàíèëèù îáúåêòîâ ðîäèòåëüñêèõ êëàññîâ |
126 | 129 | ||
127 | switch (role) { |
130 | switch (role) { |
128 | case Qt::DisplayRole: |
131 | case Qt::DisplayRole: |
129 | {
|
132 | {
|
130 | //if (check.contains(index.column()) && check.value(index.column()))
|
133 | //if (check.contains(index.column()) && check.value(index.column()))
|
131 | // return value.toInt() != 0 ? tr("Yes") : tr("No");
|
134 | // return value.toInt() != 0 ? tr("Yes") : tr("No");
|
132 | if (bolleans_list.indexOf(index.column()) != -1) |
135 | if (bolleans_list.indexOf(index.column()) != -1) |
133 | {
|
136 | {
|
134 | return value.toInt() != 0 ? tr("Äà") : tr("Íåò"); // äëÿ êîëîíîê ñ òèïîì "BOOL" |
137 | return value.toInt() != 0 ? tr("Äà") : tr("Íåò"); // äëÿ êîëîíîê ñ òèïîì "BOOL" |
135 | }
|
138 | }
|
136 | int index_of_list; |
139 | int index_of_list; |
137 | index_of_list = keys.indexOf(index.column()); |
140 | index_of_list = keys.indexOf(index.column()); |
138 | 141 | ||
139 | if (index_of_list == -1) return value; |
142 | if (index_of_list == -1) return value; |
140 | else { |
143 | else { |
141 | QString parentInctance;
|
144 | QString parentInctance;
|
142 | QSqlQuery q;
|
145 | QSqlQuery q;
|
143 | QString sql_str;
|
146 | QString sql_str;
|
144 | bool ok; |
147 | bool ok; |
145 | parentInctance = values.at(index_of_list); |
148 | parentInctance = values.at(index_of_list); |
146 | sql_str = tr("select * from `"); |
149 | sql_str = tr("select * from `"); |
147 | sql_str.append(parentInctance); |
150 | sql_str.append(parentInctance); |
148 | sql_str.append(tr("` ")); |
151 | sql_str.append(tr("` ")); |
149 | sql_str.append(tr("where `ID` = ")); |
152 | sql_str.append(tr("where `ID` = ")); |
150 | sql_str.append(value.toString()); |
153 | sql_str.append(value.toString()); |
151 | q.prepare(sql_str); |
154 | q.prepare(sql_str); |
152 | ok = q.exec(); |
155 | ok = q.exec(); |
153 | 156 | ||
154 | if (ok) { |
157 | if (ok) { |
155 | while(q.next()){ |
158 | while(q.next()){ |
156 | QString object_name = q.value(1).toString(); |
159 | QString object_name = q.value(1).toString(); |
157 | if (!object_name.isEmpty()) return object_name; |
160 | if (!object_name.isEmpty()) return object_name; |
158 | 161 | ||
159 | }
|
162 | }
|
160 | }
|
163 | }
|
161 | int ii; |
164 | int ii; |
162 | ii++; |
165 | ii++; |
163 | 166 | ||
164 | 167 | ||
165 | }
|
168 | }
|
166 | return value; |
169 | return value; |
167 | 170 | ||
168 | }
|
171 | }
|
169 | // if (index.column() == 1)
|
172 | // if (index.column() == 1)
|
170 | // return value.toString().prepend(tr("¹ "));
|
173 | // return value.toString().prepend(tr("¹ "));
|
171 | 174 | ||
172 | 175 | ||
173 | case Qt::EditRole: |
176 | case Qt::EditRole: |
174 | if (bolleans_list.indexOf(index.column()) == -1) return value; // òåêóùèé ñòîëáåö |
177 | if (bolleans_list.indexOf(index.column()) == -1) return value; // òåêóùèé ñòîëáåö |
175 | 178 | ||
176 | else { |
179 | else { |
177 | return value.toInt() != 0 ? tr("Äà") : tr("Íåò"); |
180 | return value.toInt() != 0 ? tr("Äà") : tr("Íåò"); |
178 | 181 | ||
179 | }
|
182 | }
|
180 | ///return value;
|
183 | ///return value;
|
181 | // if (index.column() == 1)
|
184 | // if (index.column() == 1)
|
182 | // return value.toString().prepend(tr("¹ "));
|
185 | // return value.toString().prepend(tr("¹ "));
|
183 | 186 | ||
184 | 187 | ||
185 | 188 | ||
186 | 189 | ||
187 | case Qt::TextColorRole: |
190 | case Qt::TextColorRole: |
188 | if(index.column() == 1) |
191 | if(index.column() == 1) |
189 | return qVariantFromValue(QColor(Qt::blue)); |
192 | return qVariantFromValue(QColor(Qt::blue)); |
190 | else
|
193 | else
|
191 | return value; |
194 | return value; |
192 | case Qt::TextAlignmentRole: return value; |
195 | case Qt::TextAlignmentRole: return value; |
193 | case Qt::FontRole: |
196 | case Qt::FontRole: |
194 | if(index.column() == 1) { |
197 | if(index.column() == 1) { |
195 | QFont font = QFont("Helvetica", 16, QFont::Bold); |
198 | QFont font = QFont("Helvetica", 16, QFont::Bold); |
196 | return qVariantFromValue(font); |
199 | return qVariantFromValue(font); |
197 | }else |
200 | }else |
198 | return value; |
201 | return value; |
199 | 202 | ||
200 | case Qt::BackgroundColorRole: { |
203 | case Qt::BackgroundColorRole: { |
201 | int a = (index.row() % 2) ? 14 : 0; |
204 | int a = (index.row() % 2) ? 14 : 0; |
202 | if(index.column() == 2) |
205 | if(index.column() == 2) |
203 | return qVariantFromValue(QColor(220,240-a,230-a)); |
206 | return qVariantFromValue(QColor(220,240-a,230-a)); |
204 | else if(index.column() == 4) |
207 | else if(index.column() == 4) |
205 | return qVariantFromValue(QColor(200,220-a,255-a)); |
208 | return qVariantFromValue(QColor(200,220-a,255-a)); |
206 | else
|
209 | else
|
207 | return value; |
210 | return value; |
208 | }
|
211 | }
|
209 | 212 | ||
210 | 213 | ||
211 | 214 | ||
212 | case Qt::CheckStateRole: |
215 | case Qt::CheckStateRole: |
213 | {
|
216 | {
|
214 | 217 | ||
215 | if (bolleans_list.indexOf(index.column()) == -1) return value; // òåêóùèé ñòîëáåö |
218 | if (bolleans_list.indexOf(index.column()) == -1) return value; // òåêóùèé ñòîëáåö |
216 | 219 | ||
217 | else
|
220 | else
|
218 | {
|
221 | {
|
219 | return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked; |
222 | return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked; |
220 | }
|
223 | }
|
221 | }
|
224 | }
|
222 | 225 | ||
223 | case Qt::SizeHintRole:return value; |
226 | case Qt::SizeHintRole:return value; |
224 | 227 | ||
225 | }
|
228 | }
|
226 | return value; |
229 | return value; |
227 | }
|
230 | }
|
228 | 231 | ||
229 | 232 | ||
230 | 233 |