qt 数据库实现翻页功能
qt使用qsqltablemodel和tableview控件对数据库进行操作和显示
·
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();
}
更多推荐
已为社区贡献1条内容
所有评论(0)