Хранилища Subversion OpenInventory

Редакция

Редакция 127 | Редакция 132 | К новейшей редакции | Только различия | Не учитывать пробелы | Содержимое файла | Авторство | Последнее изменение | Открыть журнал | RSS

Редакция 127 Редакция 131
1
#include "mainwindow.h"
1
#include "mainwindow.h"
2
#include "ui_mainwindow.h"
2
#include "ui_mainwindow.h"
3
3
4
MainWindow::MainWindow(QWidget *parent) :
4
MainWindow::MainWindow(QWidget *parent) :
5
    QMainWindow(parent),
5
    QMainWindow(parent),
6
    ui(new Ui::MainWindow)
6
    ui(new Ui::MainWindow)
7
{
7
{
8
    ui->setupUi(this);
8
    ui->setupUi(this);
9
   // connect( ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(on_currentIndexChanged(int)));
9
   // connect( ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(on_currentIndexChanged(int)));
10
    model_is_build = false;
10
    model_is_build = false;
11
   MainWindow::readModel();
11
   MainWindow::readModel();
12
12
13
   //QString model_str;
13
   //QString model_str;
14
   MainWindow::creatModelString();
14
   MainWindow::creatModelString();
15
   int i;
15
   int i;
16
   i++;
16
   i++;
17
    QFile file_tmp("./temp.txt");
17
    QFile file_tmp("./temp.txt");
18
    bool ok;
18
    bool ok;
19
    ok = file_tmp.open(QIODevice::ReadWrite | QIODevice::Text);
19
    ok = file_tmp.open(QIODevice::ReadWrite | QIODevice::Text);
20
    QTextStream out(&file_tmp);
20
    QTextStream out(&file_tmp);
21
    out << MainWindow::modelString;
21
    out << MainWindow::modelString;
22
    file_tmp.close();
22
    file_tmp.close();
23
23
24
    ui->treeWidget->setAlternatingRowColors(true);
24
    ui->treeWidget->setAlternatingRowColors(true);
25
    ui->treeWidget_2->setAlternatingRowColors(true);
25
    ui->treeWidget_2->setAlternatingRowColors(true);
26
    MainWindow::openDataBase();
26
    MainWindow::openDataBase();
27
    MainWindow::buildPreviewModel(tr("Ìîÿ ìîäåëü"), tr("7"));
27
    MainWindow::buildPreviewModel(tr("Ìîÿ ìîäåëü"), tr("1"));
28
    MainWindow::initComboBox();
28
    MainWindow::initComboBox();
29
    getDatabaseData();
29
    getDatabaseData();
30
    //// sql_mogel = new QSqlTableModel();
30
    //// sql_mogel = new QSqlTableModel();
31
    sql_mogel = new MyModel();
31
    sql_mogel = new MyModel();
32
32
33
33
34
    model_is_build = true;
34
    model_is_build = true;
35
    connect(sql_mogel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_sql_mogel_dataChanged(QModelIndex,QModelIndex)));
35
    connect(sql_mogel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(on_sql_mogel_dataChanged(QModelIndex,QModelIndex)));
36
    ui->pushButton_3->setEnabled(false);
36
    ui->pushButton_3->setEnabled(false);
37
    ui->pushButton_4->setEnabled(false);
37
    ui->pushButton_4->setEnabled(false);
38
38
39
39
40
}
40
}
41
41
42
MainWindow::~MainWindow()
42
MainWindow::~MainWindow()
43
{
43
{
44
    delete sql_mogel;
44
    delete sql_mogel;
45
    delete ui;
45
    delete ui;
46
}
46
}
47
47
48
void MainWindow::changeEvent(QEvent *e)
48
void MainWindow::changeEvent(QEvent *e)
49
{
49
{
50
    QMainWindow::changeEvent(e);
50
    QMainWindow::changeEvent(e);
51
    switch (e->type()) {
51
    switch (e->type()) {
52
    case QEvent::LanguageChange:
52
    case QEvent::LanguageChange:
53
        ui->retranslateUi(this);
53
        ui->retranslateUi(this);
54
        break;
54
        break;
55
    default:
55
    default:
56
        break;
56
        break;
57
    }
57
    }
58
}
58
}
59
59
60
60
61
bool MainWindow::readModel(){
61
bool MainWindow::readModel(){
62
    bool result;
62
    bool result;
63
    QString model_str;
63
    QString model_str;
64
    QFile file(":/model.txt");
64
    QFile file(":/model.txt");
65
65
66
   rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
66
   rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
67
    rootItem1->setText(0, tr("Óðîâåíü 1"));
67
    rootItem1->setText(0, tr("Óðîâåíü 1"));
68
   // rootItem2 = new  QTreeWidgetItem(rootItem1);
68
   // rootItem2 = new  QTreeWidgetItem(rootItem1);
69
   // rootItem2->setText(0, tr("óðîâåíü 2"));
69
   // rootItem2->setText(0, tr("óðîâåíü 2"));
70
    rootItem1->setCheckState(0,Qt::Checked);
70
    rootItem1->setCheckState(0,Qt::Checked);
71
   // rootItem2->setCheckState(0,Qt::Checked);
71
   // rootItem2->setCheckState(0,Qt::Checked);
72
72
73
73
74
74
75
    result = file.open(QIODevice::ReadOnly);
75
    result = file.open(QIODevice::ReadOnly);
76
    if (result) {
76
    if (result) {
77
                     model_str = QString(tr(file.readAll()));
77
                     model_str = QString(tr(file.readAll()));
78
                }
78
                }
79
79
80
    setupModelData(model_str.split(QString("\n")), rootItem1);
80
    setupModelData(model_str.split(QString("\n")), rootItem1);
81
81
82
82
83
    return result;
83
    return result;
84
84
85
}
85
}
86
86
87
87
88
void MainWindow::setupModelData(const QStringList &lines, QTreeWidgetItem *parent)
88
void MainWindow::setupModelData(const QStringList &lines, QTreeWidgetItem *parent)
89
{
89
{
90
    QList<QTreeWidgetItem*> parents;
90
    QList<QTreeWidgetItem*> parents;
91
    QList<int> indentations;
91
    QList<int> indentations;
92
    parents << parent;
92
    parents << parent;
93
    indentations << 0;
93
    indentations << 0;
94
94
95
    int number = 0;
95
    int number = 0;
96
96
97
    while (number < lines.count()) {
97
    while (number < lines.count()) {
98
        int position = 0;
98
        int position = 0;
99
        while (position < lines[number].length()) {
99
        while (position < lines[number].length()) {
100
            if (lines[number].mid(position, 1) != " ")
100
            if (lines[number].mid(position, 1) != " ")
101
                break;
101
                break;
102
            position++;
102
            position++;
103
        }
103
        }
104
104
105
        QString lineData = lines[number].mid(position).trimmed();
105
        QString lineData = lines[number].mid(position).trimmed();
106
106
107
        if (!lineData.isEmpty()) {
107
        if (!lineData.isEmpty()) {
108
            // Read the column data from the rest of the line.
108
            // Read the column data from the rest of the line.
109
            QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts);
109
            QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts);
110
            QList<QVariant> columnData;
110
            QList<QVariant> columnData;
111
            for (int column = 0; column < columnStrings.count(); ++column)
111
            for (int column = 0; column < columnStrings.count(); ++column)
112
                columnData << columnStrings[column];
112
                columnData << columnStrings[column];
113
113
114
            if (position > indentations.last()) {
114
            if (position > indentations.last()) {
115
                // The last child of the current parent is now the new parent
115
                // The last child of the current parent is now the new parent
116
                // unless the current parent has no children.
116
                // unless the current parent has no children.
117
117
118
                if (parents.last()->childCount() > 0) {
118
                if (parents.last()->childCount() > 0) {
119
                    parents << parents.last()->child(parents.last()->childCount()-1);
119
                    parents << parents.last()->child(parents.last()->childCount()-1);
120
                    indentations << position;
120
                    indentations << position;
121
                }
121
                }
122
            } else {
122
            } else {
123
                while (position < indentations.last() && parents.count() > 0) {
123
                while (position < indentations.last() && parents.count() > 0) {
124
                    parents.pop_back();
124
                    parents.pop_back();
125
                    indentations.pop_back();
125
                    indentations.pop_back();
126
                }
126
                }
127
            }
127
            }
128
128
129
            // Append a new item to the current parent's list of children.
129
            // Append a new item to the current parent's list of children.
130
          // // //  parents.last()->appendChild(new QTreeWidgetItem(columnData, parents.last()));
130
          // // //  parents.last()->appendChild(new QTreeWidgetItem(columnData, parents.last()));
131
            QTreeWidgetItem* itm_tmp;
131
            QTreeWidgetItem* itm_tmp;
132
            itm_tmp = new QTreeWidgetItem( parents.last());
132
            itm_tmp = new QTreeWidgetItem( parents.last());
133
133
134
            itm_tmp->setText(0, QString(columnData.at(0).toString()));
134
            itm_tmp->setText(0, QString(columnData.at(0).toString()));
135
            if (columnData.at(1).toString() == "true") {
135
            if (columnData.at(1).toString() == "true") {
136
                                                            itm_tmp->setCheckState(0,Qt::Checked);
136
                                                            itm_tmp->setCheckState(0,Qt::Checked);
137
                                                        }
137
                                                        }
138
            else itm_tmp->setCheckState(0,Qt::Unchecked);
138
            else itm_tmp->setCheckState(0,Qt::Unchecked);
139
            itm_tmp->setText(1, QString(columnData.at(2).toString()));
139
            itm_tmp->setText(1, QString(columnData.at(2).toString()));
140
            itm_tmp->setText(2, QVariant(number).toString()); // íîìåð ñòðîêè â ôàéëå-ìîäåëè îòîáðàæåíèÿ
140
            itm_tmp->setText(2, QVariant(number).toString()); // íîìåð ñòðîêè â ôàéëå-ìîäåëè îòîáðàæåíèÿ
141
            itm_tmp->setText(3, QVariant(indentations.size()).toString());
141
            itm_tmp->setText(3, QVariant(indentations.size()).toString());
142
        }
142
        }
143
143
144
        number++;
144
        number++;
145
    }
145
    }
146
}
146
}
147
147
148
148
149
/*
149
/*
150
void MainWindow::openBase()
150
void MainWindow::openBase()
151
{
151
{
152

152

153
        db = QSqlDatabase::addDatabase("QMYSQL");
153
        db = QSqlDatabase::addDatabase("QMYSQL");
154
        pdb = &db;
154
        pdb = &db;
155
        raportFrm.pdb = &db;
155
        raportFrm.pdb = &db;
156

156

157
        pdb->setHostName(hostName);
157
        pdb->setHostName(hostName);
158
        pdb->setDatabaseName(baseName);
158
        pdb->setDatabaseName(baseName);
159
        pdb->setUserName(userName);
159
        pdb->setUserName(userName);
160
        pdb->setPassword(password);
160
        pdb->setPassword(password);
161
        bool ok = pdb->open();
161
        bool ok = pdb->open();
162
        if (!ok) {
162
        if (!ok) {
163
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
163
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
164
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
164
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
165
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
165
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
166
                                                                                pdb->lastError().text());          // Òåêñò ñîîáùåíèÿ.
166
                                                                                pdb->lastError().text());          // Òåêñò ñîîáùåíèÿ.
167
                         }
167
                         }
168
        if (ok)
168
        if (ok)
169
        {lineEdit-> insert(tr("Áàçà óñïåøíî îòêðûòà"));
169
        {lineEdit-> insert(tr("Áàçà óñïåøíî îòêðûòà"));
170
        }
170
        }
171
        else {lineEdit-> insert(tr("Áàçà íåäîñòóïíà. Êîä îøèáêè: "));
171
        else {lineEdit-> insert(tr("Áàçà íåäîñòóïíà. Êîä îøèáêè: "));
172
                  lineEdit-> insert(pdb->lastError().text());
172
                  lineEdit-> insert(pdb->lastError().text());
173
                 }
173
                 }
174

174

175

175

176

176

177
        model = new QSqlTableModel(this);
177
        model = new QSqlTableModel(this);
178
        model->setTable(tableName);
178
        model->setTable(tableName);
179

179

180
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
180
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
181
        model->setSort(0, Qt::AscendingOrder);
181
        model->setSort(0, Qt::AscendingOrder);
182

182

183
        model->select();
183
        model->select();
184

184

185

185

186
        QSqlField field(tr("age"), QVariant::Int);
186
        QSqlField field(tr("age"), QVariant::Int);
187
        field.setValue(QString(tr("123")));
187
        field.setValue(QString(tr("123")));
188

188

189
        bool okey;
189
        bool okey;
190
        int index;
190
        int index;
191
        QSqlRecord record;
191
        QSqlRecord record;
192

192

193

193

194
        tableView->setModel(model);
194
        tableView->setModel(model);
195
        view.setModel(model);
195
        view.setModel(model);
196

196

197

197

198
        tableView->setAlternatingRowColors(true);
198
        tableView->setAlternatingRowColors(true);
199
        view.setAlternatingRowColors(true);
199
        view.setAlternatingRowColors(true);
200

200

201
        tableView->resizeColumnsToContents();
201
        tableView->resizeColumnsToContents();
202

202

203

203

204
        view.resizeColumnsToContents();
204
        view.resizeColumnsToContents();
205

205

206
        tableView->show();
206
        tableView->show();
207

207

208

208

209

209

210
        initTreeWidget();
210
        initTreeWidget();
211
}
211
}
212
*/
212
*/
213
213
214
214
215
void MainWindow::creatModelString(){
215
void MainWindow::creatModelString(){
216
216
217
    MainWindow::modelString.clear(); // î÷èùàåì ñòðîêó ìîäåëè
217
    MainWindow::modelString.clear(); // î÷èùàåì ñòðîêó ìîäåëè
218
 //   for (int i =0; i < rootItem1->childCount(); ++i )
218
 //   for (int i =0; i < rootItem1->childCount(); ++i )
219
219
220
    {MainWindow::addChildsString(rootItem1, 0);}
220
    {MainWindow::addChildsString(rootItem1, 0);}
221
221
222
    int root_item_child_count;
222
    int root_item_child_count;
223
    int i;
223
    int i;
224
    root_item_child_count = rootItem1->childCount();
224
    root_item_child_count = rootItem1->childCount();
225
    i++;
225
    i++;
226
226
227
}
227
}
228
228
229
229
230
void MainWindow::addChildsString(QTreeWidgetItem *parentItem, int level){
230
void MainWindow::addChildsString(QTreeWidgetItem *parentItem, int level){
231
    int child_count;
231
    int child_count;
232
    child_count = parentItem->childCount();
232
    child_count = parentItem->childCount();
233
    for (int i=0; i < child_count; ++i){
233
    for (int i=0; i < child_count; ++i){
234
        for (int m=0; m < level; ++m){
234
        for (int m=0; m < level; ++m){
235
        modelString.append(tr("    ")); // ÷åòûðå ïðîáåëà - ïðèçíàê òîãî, ÷òî ýòî íîâûé óðîâåíü âëîæåíèÿ
235
        modelString.append(tr("    ")); // ÷åòûðå ïðîáåëà - ïðèçíàê òîãî, ÷òî ýòî íîâûé óðîâåíü âëîæåíèÿ
236
    }
236
    }
237
        modelString.append(parentItem->child(i)->text(0)); // â ïåðâîé êîëîíêå - èìÿ êëàññà
237
        modelString.append(parentItem->child(i)->text(0)); // â ïåðâîé êîëîíêå - èìÿ êëàññà
238
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
238
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
239
        if (parentItem->child(i)->checkState(0) ==  Qt::Checked) {modelString.append(tr("true"));} // åñëè ãàëî÷êà ñòîèò, çàíîñèì "true", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ áóäóò
239
        if (parentItem->child(i)->checkState(0) ==  Qt::Checked) {modelString.append(tr("true"));} // åñëè ãàëî÷êà ñòîèò, çàíîñèì "true", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ áóäóò
240
            else {modelString.append(tr("false"));} // åñëè êëàññ íå âûáðàí - çàíîñèì "false", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ íå áóäóò
240
            else {modelString.append(tr("false"));} // åñëè êëàññ íå âûáðàí - çàíîñèì "false", ýëåìåíòû êëàññà â ïðåäñòàâëåíèè îòîáðàæàòüñÿ íå áóäóò
241
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
241
        modelString.append(tr("\t\t\t\t")); // ÷åòûðå òàáóëÿöèè - ïðèçíàê íîâîãî ñòîëáöà
242
        modelString.append(parentItem->child(i)->text(1)); // âî âòîðîé êîëîíêå - ID êëàññà
242
        modelString.append(parentItem->child(i)->text(1)); // âî âòîðîé êîëîíêå - ID êëàññà
243
         modelString.append(tr("\n")); // êîíåö ñòðîêè
243
         modelString.append(tr("\n")); // êîíåö ñòðîêè
244
        if (parentItem->child(i)->childCount() > 0) { MainWindow::addChildsString(parentItem->child(i), level+1);}
244
        if (parentItem->child(i)->childCount() > 0) { MainWindow::addChildsString(parentItem->child(i), level+1);}
245
245
246
    }
246
    }
247
int i;
247
int i;
248
i++;
248
i++;
249
}
249
}
250
250
251
251
252
bool MainWindow::openDataBase(){
252
bool MainWindow::openDataBase(){
253
    QString errorString;
253
    QString errorString;
254
    sql = QSqlDatabase::addDatabase("QMYSQL");
254
    sql = QSqlDatabase::addDatabase("QMYSQL");
255
    sql.setDatabaseName(tr("an_db"));
255
//    sql.setDatabaseName(tr("an_db"));
-
 
256
-
 
257
    sql.setDatabaseName(tr("inventory"));
256
    sql.setHostName(tr("localhost"));
258
    sql.setHostName(tr("localhost"));
-
 
259
-
 
260
-
 
261
-
 
262
257
    sql.setUserName(tr("an"));
263
    sql.setUserName(tr("an"));
258
    sql.setPassword(tr("393939"));
264
    sql.setPassword(tr("393939"));
259
265
260
    bool ok;
266
    bool ok;
261
    ok = sql.open();
267
    ok = sql.open();
262
268
263
    /*
269
    /*
264
    if (!ok) {
270
    if (!ok) {
265
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
271
                                QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
266
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
272
                                                                                this,                      // Ðîäèòåëüñêèé âèäæåò.
267
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
273
                                                                                QObject::tr("Database Error"),   // Çàãîëîâîê.
268
                                                                                sql.lastError().text() );         // Òåêñò ñîîáùåíèÿ.
274
                                                                                sql.lastError().text() );         // Òåêñò ñîîáùåíèÿ.
269

275

270

276

271
                            }
277
                            }
272

278

273
*/
279
*/
274
    if (!ok) {
280
    if (!ok) {
275
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
281
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
276
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
282
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
277
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
283
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
278
                                                                            sql.lastError().text());          // Òåêñò ñîîáùåíèÿ.
284
                                                                            sql.lastError().text());          // Òåêñò ñîîáùåíèÿ.
279
                     }
285
                     }
280
else {
286
else {
281
287
282
        QMessageBox::information( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
288
        QMessageBox::information( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
283
                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
289
                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
284
                                                        QObject::tr("Database Connect"),   // Çàãîëîâîê.
290
                                                        QObject::tr("Database Connect"),   // Çàãîëîâîê.
285
                                                        QObject::tr("Ñîåäèíåíèå ñ áàçîé äàííûõ óñïåøíî óñòàíîâëåíî."));         // Òåêñò ñîîáùåíèÿ.
291
                                                        QObject::tr("Ñîåäèíåíèå ñ áàçîé äàííûõ óñïåøíî óñòàíîâëåíî."));         // Òåêñò ñîîáùåíèÿ.
286
292
287
293
288
294
289
295
290
296
291
    }
297
    }
292
298
293
     return ok;
299
     return ok;
294
}
300
}
295
301
296
302
297
bool MainWindow::buildPreviewModel(QString modelName, QString rootClassID){
303
bool MainWindow::buildPreviewModel(QString modelName, QString rootClassID){
298
QSqlQuery q;
304
QSqlQuery q;
299
QString sql_str;
305
QString sql_str;
300
QString field_name_str;
306
QString field_name_str;
301
QString root_class_name;
307
QString root_class_name;
302
bool ok;
308
bool ok;
303
int field_name;
309
int field_name;
304
310
305
//ui->treeWidget->clear();
311
//ui->treeWidget->clear();
306
312
307
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
313
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
308
314
309
rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
315
rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
310
root_items_list << rootItem1;
316
root_items_list << rootItem1;
311
 rootItem1->setText(0, modelName);
317
 rootItem1->setText(0, modelName);
312
318
313
 rootItem1->setCheckState(0,Qt::Checked);
319
 rootItem1->setCheckState(0,Qt::Checked);
314
 rootItems.append(rootItem1);
320
 rootItems.append(rootItem1);
315
321
316
322
317
323
318
rootItem2 = new  QTreeWidgetItem(rootItem1);
324
rootItem2 = new  QTreeWidgetItem(rootItem1);
319
rootItem2->setText(0, root_class_name);
325
rootItem2->setText(0, root_class_name);
320
rootItem2->setText(1, rootClassID);
326
rootItem2->setText(1, rootClassID);
321
rootItem2->setCheckState(0,Qt::Checked);
327
rootItem2->setCheckState(0,Qt::Checked);
322
328
323
addChildsItems(rootItem2);
329
addChildsItems(rootItem2);
324
330
325
sql_str = tr("select * "
331
sql_str = tr("select * "
326
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
332
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
327
             );
333
             );
328
sql_str.append(rootClassID);
334
sql_str.append(rootClassID);
329
335
330
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
336
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
331
337
332
q.prepare(sql_str);
338
q.prepare(sql_str);
333
339
334
ok = q.exec();
340
ok = q.exec();
335
if (!ok) {
341
if (!ok) {
336
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
342
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
337
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
343
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
338
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
344
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
339
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
345
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
340
                 }
346
                 }
341
field_name = q.record().indexOf(tr("FieldName"));
347
field_name = q.record().indexOf(tr("FieldName"));
342
while(q.next()){
348
while(q.next()){
343
349
344
                field_name_str = q.value(field_name).toString();
350
                field_name_str = q.value(field_name).toString();
345
351
346
                }
352
                }
347
353
348
354
349
355
350
356
351
}
357
}
352
358
353
359
354
bool MainWindow::rebuildPreviewModel(QTreeWidgetItem* root_item, QString rootClassID){
360
bool MainWindow::rebuildPreviewModel(QTreeWidgetItem* root_item, QString rootClassID){
355
QSqlQuery q;
361
QSqlQuery q;
356
QString sql_str;
362
QString sql_str;
357
QString field_name_str;
363
QString field_name_str;
358
QString root_class_name;
364
QString root_class_name;
359
bool ok;
365
bool ok;
360
int field_name;
366
int field_name;
361
367
362
//ui->treeWidget->clear();
368
//ui->treeWidget->clear();
363
369
364
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
370
root_class_name = MainWindow::ClassName(rootClassID); // îïðåäåëÿåì èìÿ êëàññà
365
371
366
372
367
// rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
373
// rootItem1 = new  QTreeWidgetItem(ui->treeWidget);
368
// root_items_list << rootItem1;
374
// root_items_list << rootItem1;
369
// rootItem1->setText(0, modelName);
375
// rootItem1->setText(0, modelName);
370
376
371
// rootItem1->setCheckState(0,Qt::Checked);
377
// rootItem1->setCheckState(0,Qt::Checked);
372
// rootItems.append(rootItem1);
378
// rootItems.append(rootItem1);
373
379
374
// root_item->removeChild(root_item->child(0)); // î÷èùàåì ñïèñîê äî÷åðíèõ êëàññîâ
380
// root_item->removeChild(root_item->child(0)); // î÷èùàåì ñïèñîê äî÷åðíèõ êëàññîâ
375
if (root_item->childCount()==1){
381
if (root_item->childCount()==1){
376
root_item->child(0)->setText(0, root_class_name);
382
root_item->child(0)->setText(0, root_class_name);
377
root_item->child(0)->setText(1, rootClassID);
383
root_item->child(0)->setText(1, rootClassID);
378
root_item->child(0)->setCheckState(0,Qt::Checked);}
384
root_item->child(0)->setCheckState(0,Qt::Checked);}
379
385
380
//delete rootItem2;
386
//delete rootItem2;
381
387
382
388
383
// rootItem2 = new  QTreeWidgetItem(rootItem1);
389
// rootItem2 = new  QTreeWidgetItem(rootItem1);
384
390
385
391
386
392
387
// rootItem2->setText(0, root_class_name);
393
// rootItem2->setText(0, root_class_name);
388
// rootItem2->setText(1, rootClassID);
394
// rootItem2->setText(1, rootClassID);
389
// rootItem2->setCheckState(0,Qt::Checked);
395
// rootItem2->setCheckState(0,Qt::Checked);
390
396
391
int child_count = root_item->child(0)->childCount();
397
int child_count = root_item->child(0)->childCount();
392
398
393
399
394
400
395
for (int i=0; i < child_count; i++){
401
for (int i=0; i < child_count; i++){
396
    root_item->child(0)->removeChild(root_item->child(0)->child(0));
402
    root_item->child(0)->removeChild(root_item->child(0)->child(0));
397
}
403
}
398
404
399
child_count = root_item->child(0)->childCount();
405
child_count = root_item->child(0)->childCount();
400
addChildsItems(root_item->child(0));
406
addChildsItems(root_item->child(0));
401
/*
407
/*
402
sql_str = tr("select * "
408
sql_str = tr("select * "
403
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
409
             " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
404
             );
410
             );
405
sql_str.append(rootClassID);
411
sql_str.append(rootClassID);
406

412

407
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
413
sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
408

414

409
q.prepare(sql_str);
415
q.prepare(sql_str);
410

416

411
ok = q.exec();
417
ok = q.exec();
412
if (!ok) {
418
if (!ok) {
413
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
419
                        QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
414
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
420
                                                                        this,                      // Ðîäèòåëüñêèé âèäæåò.
415
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
421
                                                                        QObject::tr("Database Error"),   // Çàãîëîâîê.
416
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
422
                                                                        q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
417
                 }
423
                 }
418
field_name = q.record().indexOf(tr("FieldName"));
424
field_name = q.record().indexOf(tr("FieldName"));
419
while(q.next()){
425
while(q.next()){
420

426

421
                field_name_str = q.value(field_name).toString();
427
                field_name_str = q.value(field_name).toString();
422

428

423
                }
429
                }
424

430

425
*/
431
*/
426
432
427
433
428
}
434
}
429
435
430
436
431
437
432
438
433
QString MainWindow::ClassName(QString class_id){ //âîçâðàùàåò èìÿ êëàññà ïî åãî ID
439
QString MainWindow::ClassName(QString class_id){ //âîçâðàùàåò èìÿ êëàññà ïî åãî ID
434
    QSqlQuery q;
440
    QSqlQuery q;
435
    QString sql_str;
441
    QString sql_str;
436
    QString class_name_str;
442
    QString class_name_str;
437
    bool ok;
443
    bool ok;
438
    int field_class_name;
444
    int field_class_name;
439
445
440
    sql_str = tr("select * "
446
    sql_str = tr("select * "
441
                 " from ListOfClasses where ListOfClasses.ID = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
447
                 " from ListOfClasses where ListOfClasses.ID = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
442
                 );
448
                 );
443
449
444
    sql_str.append(class_id);
450
    sql_str.append(class_id);
445
    sql_str.append(tr("' "));
451
    sql_str.append(tr("' "));
446
452
447
    q.prepare(sql_str);
453
    q.prepare(sql_str);
448
454
449
    ok = q.exec();
455
    ok = q.exec();
450
456
451
457
452
    if (!ok) {
458
    if (!ok) {
453
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
459
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
454
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
460
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
455
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
461
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
456
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
462
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
457
                     }
463
                     }
458
464
459
    field_class_name = q.record().indexOf(tr("ClassName"));
465
    field_class_name = q.record().indexOf(tr("ClassName"));
460
    while(q.next()){
466
    while(q.next()){
461
467
462
                    class_name_str = q.value(field_class_name).toString();
468
                    class_name_str = q.value(field_class_name).toString();
463
469
464
                    }
470
                    }
465
471
466
    return class_name_str;
472
    return class_name_str;
467
473
468
}
474
}
469
475
470
void MainWindow::addChildsItems(QTreeWidgetItem *perent_class_item){ // äîáîâëÿåì ê ýëåìåíòó äåðåâà â êà÷åñòâå äî÷åðíèõ ýëåìåíòîâ âñå êëàññû, äëÿ êîòîðûõ êëàññ ýëåìåíòà ÿâëÿåòñÿ êîíòåéíåðîì
476
void MainWindow::addChildsItems(QTreeWidgetItem *perent_class_item){ // äîáîâëÿåì ê ýëåìåíòó äåðåâà â êà÷åñòâå äî÷åðíèõ ýëåìåíòîâ âñå êëàññû, äëÿ êîòîðûõ êëàññ ýëåìåíòà ÿâëÿåòñÿ êîíòåéíåðîì
471
QStringList chields_list;
477
QStringList chields_list;
472
QString parent_ID;
478
QString parent_ID;
473
QTreeWidgetItem *Item_tmp;
479
QTreeWidgetItem *Item_tmp;
474
parent_ID = perent_class_item->text(1);
480
parent_ID = perent_class_item->text(1);
475
int chields_count, i;
481
int chields_count, i;
476
482
477
chields_list = MainWindow::classChields(parent_ID);
483
chields_list = MainWindow::classChields(parent_ID);
478
if(chields_list.isEmpty()) return;
484
if(chields_list.isEmpty()) return;
479
chields_count = chields_list.size();
485
chields_count = chields_list.size();
480
for (int l = 0; l < chields_count; ++l){
486
for (int l = 0; l < chields_count; ++l){
481
    QString chield_class_name, chield_id;
487
    QString chield_class_name, chield_id;
482
    chield_id = chields_list.at(l);
488
    chield_id = chields_list.at(l);
483
    chield_class_name = MainWindow::ClassName(chield_id);
489
    chield_class_name = MainWindow::ClassName(chield_id);
484
    Item_tmp = new QTreeWidgetItem(perent_class_item);
490
    Item_tmp = new QTreeWidgetItem(perent_class_item);
485
    Item_tmp->setText(0, chield_class_name);
491
    Item_tmp->setText(0, chield_class_name);
486
    Item_tmp->setText(1, chield_id);
492
    Item_tmp->setText(1, chield_id);
487
    Item_tmp->setCheckState(0, Qt::Checked);
493
    Item_tmp->setCheckState(0, Qt::Checked);
488
    MainWindow::addChildsItems(Item_tmp);
494
    MainWindow::addChildsItems(Item_tmp);
489
}
495
}
490
496
491
i++;
497
i++;
492
498
493
}
499
}
494
500
495
501
496
/********************************************************
502
/********************************************************
497
* Ôóíêöèÿ âîçâðàùàåò ñïèñîê "äî÷åðíèõ" êëàññîâ
503
* Ôóíêöèÿ âîçâðàùàåò ñïèñîê "äî÷åðíèõ" êëàññîâ
498
*
504
*
499
*
505
*
500
*
506
*
501
********************************************************/
507
********************************************************/
502
508
503
QStringList MainWindow::classChields(QString class_id){
509
QStringList MainWindow::classChields(QString class_id){
504
   // QMap<QString, QString> map;
510
   // QMap<QString, QString> map;
505
   // TClass class_tmp;
511
   // TClass class_tmp;
506
   // QList <TClass> chields_class_list; // ñïèñîê äî÷åðíèõ êëàññîâ
512
   // QList <TClass> chields_class_list; // ñïèñîê äî÷åðíèõ êëàññîâ
507
    QStringList result;
513
    QStringList result;
508
    QSqlQuery q;
514
    QSqlQuery q;
509
    QString sql_str;
515
    QString sql_str;
510
    QString classIdentifer_str; // â ýòîì ïîëå ëåæèò èäåíòèôèêàòîð êëàññà-êîíòåéíåðà
516
    QString classIdentifer_str; // â ýòîì ïîëå ëåæèò èäåíòèôèêàòîð êëàññà-êîíòåéíåðà
511
    QString field_id_str;
517
    QString field_id_str;
512
    bool ok;
518
    bool ok;
513
    int field_classIdentifer;
519
    int field_classIdentifer;
514
    sql_str = tr("select * "
520
    sql_str = tr("select * "
515
                 " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
521
                 " from DescriptionOfClasses where  DescriptionOfClasses.DefaultValue = '"       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
516
                 );
522
                 );
517
    sql_str.append(class_id);
523
    sql_str.append(class_id);
518
524
519
    sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
525
    sql_str.append(tr("' and DescriptionOfClasses.FieldType = 'pointer' "));
520
526
521
    q.prepare(sql_str);
527
    q.prepare(sql_str);
522
528
523
    ok = q.exec();
529
    ok = q.exec();
524
    if (!ok) {
530
    if (!ok) {
525
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
531
                            QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
526
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
532
                                                                            this,                      // Ðîäèòåëüñêèé âèäæåò.
527
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
533
                                                                            QObject::tr("Database Error"),   // Çàãîëîâîê.
528
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
534
                                                                            q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
529
                     }
535
                     }
530
    field_classIdentifer = q.record().indexOf(tr("ClassIdentifer"));
536
    field_classIdentifer = q.record().indexOf(tr("ClassIdentifer"));
531
      while(q.next()){
537
      while(q.next()){
532
538
533
                    classIdentifer_str = q.value(field_classIdentifer).toString();
539
                    classIdentifer_str = q.value(field_classIdentifer).toString();
534
                    result.append(classIdentifer_str);
540
                    result.append(classIdentifer_str);
535
                    }
541
                    }
536
542
537
    return result;
543
    return result;
538
544
539
  }
545
  }
540
546
541
547
542
QMap <QString, QString> MainWindow::getClassList(){ // ïîëó÷àåì ñïèñîê êëàññîâ
548
QMap <QString, QString> MainWindow::getClassList(){ // ïîëó÷àåì ñïèñîê êëàññîâ
543
QMap <QString, QString> result_map;
549
QMap <QString, QString> result_map;
544
QSqlQuery q;
550
QSqlQuery q;
545
QString sql_str;
551
QString sql_str;
546
QString class_name_str, class_id_str;
552
QString class_name_str, class_id_str;
547
553
548
int field_class_id, field_class_name;
554
int field_class_id, field_class_name;
549
bool ok;
555
bool ok;
550
sql_str = tr("select * "
556
sql_str = tr("select * "
551
             " from ListOfClasses "       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
557
             " from ListOfClasses "       //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì
552
             );
558
             );
553
 q.prepare(sql_str);
559
 q.prepare(sql_str);
554
 ok = q.exec();
560
 ok = q.exec();
555
 if (!ok) {
561
 if (!ok) {
556
                         QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
562
                         QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
557
                                                                         this,                      // Ðîäèòåëüñêèé âèäæåò.
563
                                                                         this,                      // Ðîäèòåëüñêèé âèäæåò.
558
                                                                         QObject::tr("Database Error"),   // Çàãîëîâîê.
564
                                                                         QObject::tr("Database Error"),   // Çàãîëîâîê.
559
                                                                         q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
565
                                                                         q.lastError().text());          // Òåêñò ñîîáùåíèÿ.
560
                         return result_map; // åñëè îøèáêà - âîçâðàùàåì ïóñòîé ñïèñîê
566
                         return result_map; // åñëè îøèáêà - âîçâðàùàåì ïóñòîé ñïèñîê
561
                  }
567
                  }
562
field_class_id = q.record().indexOf(tr("ID"));
568
field_class_id = q.record().indexOf(tr("ID"));
563
field_class_name = q.record().indexOf(tr("ClassName"));
569
field_class_name = q.record().indexOf(tr("ClassName"));
564
570
565
while(q.next()){
571
while(q.next()){
566
572
567
                class_name_str = q.value(field_class_name).toString();
573
                class_name_str = q.value(field_class_name).toString();
568
                class_id_str = q.value(field_class_id).toString();
574
                class_id_str = q.value(field_class_id).toString();
569
                result_map[class_id_str] = class_name_str;
575
                result_map[class_id_str] = class_name_str;
570
                }
576
                }
571
 return result_map;
577
 return result_map;
572
}
578
}
573
579
574
580
575
581
576
582
577
583
578
void MainWindow::initComboBox(){
584
void MainWindow::initComboBox(){
579
585
580
586
581
    QStringList classesNameList;
587
    QStringList classesNameList;
582
    QStringList classesID_list;
588
    QStringList classesID_list;
583
    QStringList tmp_stringList;
589
    QStringList tmp_stringList;
584
590
585
591
586
592
587
    QString tmp_str;
593
    QString tmp_str;
588
594
589
    class_list_map = MainWindow::getClassList();
595
    class_list_map = MainWindow::getClassList();
590
    classesID_list = class_list_map.keys();
596
    classesID_list = class_list_map.keys();
591
    classesNameList = class_list_map.values();
597
    classesNameList = class_list_map.values();
592
    QMapIterator<QString, QString> interator(class_list_map);
598
    QMapIterator<QString, QString> interator(class_list_map);
593
//    ui->comboBox->addItems(classesID_list);
599
//    ui->comboBox->addItems(classesID_list);
594
  //  ui->comboBox->addItems(classesNameList);
600
  //  ui->comboBox->addItems(classesNameList);
595
    while (interator.hasNext()) {
601
    while (interator.hasNext()) {
596
         interator.next();
602
         interator.next();
597
         tmp_str =  interator.value();
603
         tmp_str =  interator.value();
598
         tmp_str.append(tr(" \t(ID="));
604
         tmp_str.append(tr(" \t(ID="));
599
         tmp_str.append(interator.key());
605
         tmp_str.append(interator.key());
600
         tmp_str.append(tr(")"));
606
         tmp_str.append(tr(")"));
601
         tmp_stringList << tmp_str;
607
         tmp_stringList << tmp_str;
602
608
603
     }
609
     }
604
    ui->comboBox->addItems(tmp_stringList);
610
    ui->comboBox->addItems(tmp_stringList);
605
611
606
612
607
}
613
}
608
614
609
615
610
void MainWindow::on_comboBox_currentIndexChanged( int index ){
616
void MainWindow::on_comboBox_currentIndexChanged( int index ){
611
QStringList classesNameList;
617
QStringList classesNameList;
612
QStringList classesID_list;
618
QStringList classesID_list;
613
QString ID_str;
619
QString ID_str;
614
classesID_list = class_list_map.keys();
620
classesID_list = class_list_map.keys();
615
classesNameList = class_list_map.values();
621
classesNameList = class_list_map.values();
616
ID_str =  classesID_list[index];
622
ID_str =  classesID_list[index];
617
ui->label->setText(ID_str);
623
ui->label->setText(ID_str);
618
if (root_items_list.indexOf(ui->treeWidget->currentItem()) != -1) rebuildPreviewModel(ui->treeWidget->currentItem(), ID_str);
624
if (root_items_list.indexOf(ui->treeWidget->currentItem()) != -1) rebuildPreviewModel(ui->treeWidget->currentItem(), ID_str);
619
getDatabaseData();
625
getDatabaseData();
620
626
621
627
622
}
628
}
623
629
624
void MainWindow::on_treeWidget_itemChanged ( QTreeWidgetItem * item, int column ){
630
void MainWindow::on_treeWidget_itemChanged ( QTreeWidgetItem * item, int column ){
625
    int i;
631
    int i;
626
    i++;
632
    i++;
627
633
628
    if ((column) == 0 && (model_is_build)) getDatabaseData();
634
    if ((column) == 0 && (model_is_build)) getDatabaseData();
629
635
630
}
636
}
631
637
632
638
633
void MainWindow::on_treeWidget_itemClicked ( QTreeWidgetItem * item, int column ){
639
void MainWindow::on_treeWidget_itemClicked ( QTreeWidgetItem * item, int column ){
634
    int i;
640
    int i;
635
    i++;
641
    i++;
636
    if (root_items_list.indexOf(item) != -1) {
642
    if (root_items_list.indexOf(item) != -1) {
637
        QStringList classesNameList;
643
        QStringList classesNameList;
638
        QStringList classesID_list;
644
        QStringList classesID_list;
639
645
640
        int index;
646
        int index;
641
        classesID_list = class_list_map.keys();
647
        classesID_list = class_list_map.keys();
642
        classesNameList = class_list_map.values();
648
        classesNameList = class_list_map.values();
643
        index = classesID_list.indexOf(item->child(0)->text(1));
649
        index = classesID_list.indexOf(item->child(0)->text(1));
644
        ui->comboBox->setCurrentIndex(index);
650
        ui->comboBox->setCurrentIndex(index);
645
651
646
        ui->comboBox->setEnabled(true);
652
        ui->comboBox->setEnabled(true);
647
653
648
654
649
    }
655
    }
650
  //  if ((rootItem1) == (item) ) ui->comboBox->setEnabled(true);
656
  //  if ((rootItem1) == (item) ) ui->comboBox->setEnabled(true);
651
else ( ui->comboBox->setEnabled(false));
657
else ( ui->comboBox->setEnabled(false));
652
}
658
}
653
659
654
QMap <QString, QString> MainWindow::getFieldsList(QString class_id){ // ïîëó÷àåì ñïèñîê ïîëåé êëàññà
660
QMap <QString, QString> MainWindow::getFieldsList(QString class_id){ // ïîëó÷àåì ñïèñîê ïîëåé êëàññà
655
661
656
}
662
}
657
 
663