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