Предположим, что на форме расположен объект класса QStackedWidget, на страницах которого расположены объекты QTableView, отображающие различные данные. В один момент времени данные будут отображаться только в одном из виджетов QTableView (по одному на страницу stacked widget). Объявим модель для данных типа QSqlQueryModel:
private:
Ui::MainWindow *ui;
QSqlQueryModel *model;
Определение модели происходит следующим образом (на примере для одной страницы):
void MainWindow::showTableView1()
{
if (model != 0)
model->clear();
else
model = new QSqlQueryModel;
model->setQuery(firstQuery());
if (model->lastError().isValid())
qDebug() << model->lastError().text();
qDebug() << "query:" << model->query().lastQuery();
QStringList columns;
columns.push_back(tr("Колонка1"));
columns.push_back(tr("Колонка2"));
columns.push_back(tr("Колонка3");
columns.push_back(tr("Колонка4"));
/*или можно так:
columns << tr("Колонка1") << tr("Колонка2")
<< tr("Колонка3") << tr("Колонка4");
*/
modelToTable(0, columns);
}
Здесь firstQuery() — функция, которая возвращает текст запроса данных для отображения на данной странице №0. Тут можно вставить любой запрос, например «select id, name_, date_, count_ from product».
В порядке следования колонок заполняем список строк своими наименованиями колонок. Если не присваивать свои названия, то отображаться будут те, с которыми создавалась таблица в СУБД. Вызываем функцию «построения» данных в виджете tableView:
void MainWindow::modelToTable(uint number, QStringList columns)
{
for (int i = 0; i < columns.size(); ++i)
model->setHeaderData(i, Qt::Horizontal, tr("%1").arg(columns[i]));
QTableView *view;
switch(number) {
case 0:
view = ui->tableView1;
break;
case 1:
view = ui->tableView2;
break;
case 2:
view = ui->tableView3;
break;
}
view->setModel(model);
//этот цикл нужен только в том случае, если названия колонок в
//списке переданы для видимых колонок, и они все находятся в начале
//выборки данных, а остальные - невидимые
for (int i = columns.size(); i < model->columnCount(); ++i)
view->setColumnHidden(i, true);
view->resizeColumnsToContents();
view->setSelectionMode(QAbstractItemView::SingleSelection);
view->setSelectionBehavior(QAbstractItemView::SelectRows);
view->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
Понравилось это:
Нравится Загрузка...
Похожие записи
Отображение данных выборки в виджете QTableView: 3 комментария