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