qt 数据库实现翻页功能

qt使用qsqltablemodel和tableview控件对数据库进行操作和显示,但是qsqltablemodel本身并不支持翻页操作。
但是qsqltablemodel的select函数会调用selectStatement函数返回的语句,进行数据库的查询操作,也就是说可以通过继承qsqltablemodel类,覆写其中的selectStatement函数来实现显示特定页数的数据
自定义类mySqlTableModel 继承qsqltablemodel

class mySqlTableModel : public QSqlTableModel
{
public:
    mySqlTableModel();
    QString selectStatement() const;
    void totalRowCount();
    void setSelectAllData(bool choose);
private:
    int totalRows;
    int currentPage;
    bool selectAllData;
};

覆写selectStatement函数

QString mySqlTableModel::selectStatement()const{
    QString strRet;
    if(selectAllData){
        return this->QSqlTableModel::selectStatement();
    }else{
        strRet+="select * from table_1 limit 5 offset "+QString::number((currentPage-1)*5);
    }
    return strRet;
}

为什么加一个selectAllData变量,因为QSqlTableModel的filter函数会同样使用selectStatement函数,为了查询数据的完整性,在使用filter函数时将selectAllData赋值真,使用原生的selectStatement函数
对总行数的统计

void mySqlTableModel::totalRowCount(){
    QSqlQuery query;
    query.exec("select * from table_1");
    QSqlQueryModel *querymodel=new QSqlQueryModel();
    querymodel->setQuery(query);
    totalRows=querymodel->rowCount();
}

mySqlTableModel上翻页下翻页函数

//下翻页
bool mySqlTableModel::pageDown(){
    if(totalRows>currentPage*5){
        currentPage++;
        return true;
    }
    return false;
}
//上翻页
bool mySqlTableModel::pageUp(){
    if(currentPage>1){
        currentPage--;
        return true;
    }
    return false;
}

主程序中使用mySqlTableModel实现翻页(model为mySqlTableModel的实例)

//下翻页
void MainWindow::on_pushButton_3_clicked()
{
    model->pageDown();
    model->setSelectAllData(false);
    model->select();

}
//上翻页
void MainWindow::on_pushButton_2_clicked()
{
    model->pageUp();
    model->setSelectAllData(false);
    model->select();
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Qt中,可以使用QSqlTableModel或QSqlQueryModel来展示和控制数据库表。其中,QSqlTableModel可以提供默认的编辑和翻页功能,而QSqlQueryModel则只提供翻页功能。下面以QSqlTableModel为例,介绍表格的翻页。 首先,在创建QSqlTableModel时,可以设置每页显示的行数。例如,以下代码将每页显示10行: ```cpp QSqlTableModel *model = new QSqlTableModel(this, database); model->setTable("table_name"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); model->setSort(0, Qt::AscendingOrder); model->setPageSize(10); model->select(); ``` 在完成设置后,可以将QSqlTableModel绑定到QTableView中。为了显示翻页按钮,可以使用QTableView的setCornerButtonEnabled函数打开角落按钮。 ```cpp QTableView *view = new QTableView(this); view->setModel(model); view->setCornerButtonEnabled(true); ``` 最后,在UI中放置一个QSpinBox控件和两个QPushButton控件,分别代表当前页和翻页操作。在QPushButton的clicked信号中,可以调用QSqlTableModel的setPage方法实现翻页。例如,以下代码实现向前翻页: ```cpp void MainWindow::onPrevClicked() { int currentPage = model->currentPage(); if (currentPage > 0) { model->setPage(currentPage - 1); ui->spinBox->setValue(currentPage); } } ``` 其中,currentPage返回当前页码,setPage设置指定的页码。对于向后翻页,只需要将currentPage + 1即可。 通过以上步骤,即可在Qt实现数据库表的翻页功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百口可乐__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值