qt tableview分页显示数据库中的数据 给出代码
时间: 2023-03-30 15:02:50 浏览: 249
可以使用QSqlTableModel类来实现分页显示数据库中的数据,具体代码如下:
```c++
#include <QSqlTableModel>
#include <QTableView>
#include <QVBoxLayout>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
if (!db.open()) {
qDebug() << "Failed to open database!";
return -1;
}
// 创建数据模型
QSqlTableModel *model = new QSqlTableModel();
model->setTable("student");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
// 创建表格视图
QTableView *tableView = new QTableView();
tableView->setModel(model);
tableView->setSelectionMode(QAbstractItemView::SingleSelection);
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
tableView->horizontalHeader()->setStretchLastSection(true);
// 创建分页控件
QPaginator *paginator = new QPaginator(model->rowCount(), 10);
connect(paginator, &QPaginator::currentPageChanged, [=](int page) {
int offset = (page - 1) * 10;
model->setFilter(QString("id >= %1 and id <= %2").arg(offset + 1).arg(offset + 10));
model->select();
});
// 创建主窗口
QWidget *widget = new QWidget();
QVBoxLayout *layout = new QVBoxLayout(widget);
layout->addWidget(tableView);
layout->addWidget(paginator);
widget->show();
return a.exec();
}
```
其中,QPaginator是一个自定义的分页控件,可以根据需要进行修改。在分页控件的currentPageChanged信号中,根据当前页数计算出需要显示的数据范围,然后通过setFilter方法设置过滤条件,再调用select方法更新数据模型。
阅读全文