C++, Qt, Базы данных

Отображение данных выборки в виджете QTableView

Предположим, что на форме расположен объект класса QStackedWidget, на страницах которого расположены объекты QTableView, отображающие различные данные. В один момент времени данные будут отображаться только в одном из виджетов QTableView (по одному на страницу stacked widget). Объявим модель для данных типа QSqlQueryModel:

[pastacode lang=»cpp» manual=»private%3A%0A%20%20%20%20Ui%3A%3AMainWindow%20*ui%3B%0A%20%20%20%20QSqlQueryModel%20*model%3B» message=»» highlight=»» provider=»manual»/]

Определение модели происходит следующим образом (на примере для одной страницы):

[pastacode lang=»cpp» manual=»void%20MainWindow%3A%3AshowTableView1()%0A%7B%0A%20%20%20%20if%20(model%20!%3D%200)%0A%20%20%20%20%20%20%20%20model-%3Eclear()%3B%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20model%20%3D%20new%20QSqlQueryModel%3B%0A%20%20%20%20model-%3EsetQuery(firstQuery())%3B%0A%20%20%20%20if%20(model-%3ElastError().isValid())%0A%20%20%20%20%20%20%20%20qDebug()%20%3C%3C%20model-%3ElastError().text()%3B%0A%20%20%20%20qDebug()%20%3C%3C%20%22query%3A%22%20%3C%3C%20model-%3Equery().lastQuery()%3B%0A%0A%20%20%20%20QStringList%20columns%3B%0A%0A%20%20%20%20columns.push_back(tr(%22%D0%9A%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B01%22))%3B%0A%20%20%20%20columns.push_back(tr(%22%D0%9A%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B02%22))%3B%0A%20%20%20%20columns.push_back(tr(%22%D0%9A%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B03%22)%3B%0A%20%20%20%20columns.push_back(tr(%22%D0%9A%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B04%22))%3B%0A%09%2F*%D0%B8%D0%BB%D0%B8%20%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D1%82%D0%B0%D0%BA%3A%0A%09columns%20%3C%3C%20tr(%22%D0%9A%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B01%22)%20%3C%3C%20tr(%22%D0%9A%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B02%22)%0A%09%09%09%3C%3C%20tr(%22%D0%9A%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B03%22)%20%3C%3C%20tr(%22%D0%9A%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%B04%22)%3B%0A%09*%2F%20%20%20%20%0A%09modelToTable(0%2C%20columns)%3B%0A%7D» message=»» highlight=»» provider=»manual»/]

Здесь firstQuery() — функция, которая возвращает текст запроса данных для отображения на данной странице №0. Тут можно вставить любой запрос, например «select id, name_, date_, count_ from product».

В порядке следования колонок заполняем список строк своими наименованиями колонок. Если не присваивать свои названия, то отображаться будут те, с которыми создавалась таблица в СУБД. Вызываем функцию «построения» данных в виджете tableView:

[pastacode lang=»cpp» manual=»void%20MainWindow%3A%3AmodelToTable(uint%20number%2C%20QStringList%20columns)%0A%7B%0A%20%20%20%20for%20(int%20i%20%3D%200%3B%20i%20%3C%20columns.size()%3B%20%2B%2Bi)%0A%20%20%20%20%20%20%20%20model-%3EsetHeaderData(i%2C%20Qt%3A%3AHorizontal%2C%20tr(%22%251%22).arg(columns%5Bi%5D))%3B%0A%20%20%20%20QTableView%20*view%3B%0A%20%20%20%20switch(number)%20%7B%0A%20%20%20%20case%200%3A%0A%20%20%20%20%20%20%20%20view%20%3D%20ui-%3EtableView1%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20case%201%3A%0A%20%20%20%20%20%20%20%20view%20%3D%20ui-%3EtableView2%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20case%202%3A%0A%20%20%20%20%20%20%20%20view%20%3D%20ui-%3EtableView3%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%20%20%20%20view-%3EsetModel(model)%3B%0A%09%2F%2F%D1%8D%D1%82%D0%BE%D1%82%20%D1%86%D0%B8%D0%BA%D0%BB%20%D0%BD%D1%83%D0%B6%D0%B5%D0%BD%20%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%B2%20%D1%82%D0%BE%D0%BC%20%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B5%2C%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%BE%D0%BA%20%D0%B2%20%0A%09%2F%2F%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D0%BD%D1%8B%20%D0%B4%D0%BB%D1%8F%20%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%D1%8B%D1%85%20%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%BE%D0%BA%2C%20%D0%B8%20%D0%BE%D0%BD%D0%B8%20%D0%B2%D1%81%D0%B5%20%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D1%8F%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D0%B5%0A%09%2F%2F%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D0%B8%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%2C%20%D0%B0%20%D0%BE%D1%81%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20-%20%D0%BD%D0%B5%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%D1%8B%D0%B5%0A%20%20%20%20for%20(int%20i%20%3D%20columns.size()%3B%20i%20%3C%20model-%3EcolumnCount()%3B%20%2B%2Bi)%0A%20%20%20%20%20%20%20%20view-%3EsetColumnHidden(i%2C%20true)%3B%0A%20%20%20%20view-%3EresizeColumnsToContents()%3B%0A%20%20%20%20view-%3EsetSelectionMode(QAbstractItemView%3A%3ASingleSelection)%3B%0A%20%20%20%20view-%3EsetSelectionBehavior(QAbstractItemView%3A%3ASelectRows)%3B%0A%20%20%20%20view-%3EsetEditTriggers(QAbstractItemView%3A%3ANoEditTriggers)%3B%0A%7D» message=»» highlight=»» provider=»manual»/]

Отображение данных выборки в виджете QTableView: 3 комментария

Оставьте своё мнение...

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.