分享

qt mysql 分页

 tianht 2015-05-15

最近看到关于qt 中mysql 浏览数据分页,有人用到了qtablewidget 翻页时手动添加

就在想,既然qt中提供了view和model,为什么放着不用哪?

简单实现了一把,记录一下



首先重新继承一下QSqlTableModel,翻页时修改记录数


userSqlTableModel.h

  1. #ifndef USERSQLTABLEMODEL_H  
  2. #define USERSQLTABLEMODEL_H  
  3.   
  4. #include <QSqlTableModel>  
  5.   
  6. class UserSqlTableModel : public QSqlTableModel  
  7. {  
  8.     Q_OBJECT  
  9. public:  
  10.     explicit UserSqlTableModel(QObject *parent = 0,QSqlDatabase db = QSqlDatabase() );  
  11.   
  12.     void setStart(int start){this->m_nStart = start;}  
  13.     int getStart(){return this->m_nStart;}  
  14. public:  
  15.     QVariant headerData(int section, Qt::Orientation orientation, int role) const;  
  16. private:  
  17.     int m_nStart;   //记录数据起始id  
  18. };  
  19.   
  20. #endif // USERSQLTABLEMODEL_H  

userSqlTableModel.cpp

  1. #include "usersqltablemodel.h"  
  2.   
  3. UserSqlTableModel::UserSqlTableModel(QObject *parent,QSqlDatabase db) :  
  4.     QSqlTableModel(parent,db)  
  5. {  
  6.     m_nStart = 0;  
  7. }  
  8. QVariant UserSqlTableModel::headerData(int section, Qt::Orientation orient, int role) const  
  9. {  
  10.   if (orient == Qt::Vertical && role == Qt::DisplayRole)  
  11.     return section + m_nStart;  
  12.   
  13.   return QSqlTableModel::headerData(section,orient,role);  
  14. }  

在对话框类中声明几个变量:

  1. private:  
  2.     UserSqlTableModel *userModel;  
  3.   
  4.   
  5.     int m_nTotal;           //总记录数  
  6.     int m_nPageSize;        //每页显示条数  
  7.     int m_nCurPageSize;     //当前页数据条数  
  8.     int m_nStart;           //起始记录数  

初始化变量:

  1. this->m_nStart = -1;  
  2. this->m_nPageSize = 6;  
  3. this->m_nCurPageSize = 0;  
  4. this->m_nTotal = 0;  
  5.   
  6. userModel = new UserSqlTableModel(this);  
  7. userModel->setTable("user");  
  8. userModel->setSort(User_Name, Qt::AscendingOrder);  
  9. userModel->setHeaderData(User_Name, Qt::Horizontal,tr("账 号"));  
  10. userModel->setHeaderData(User_GroupChName, Qt::Horizontal,tr("所属组"));  
  11. userModel->setHeaderData(User_Description,Qt::Horizontal, tr("备注"));  
  12.   
  13.   
  14. userView->setModel(userModel);  
  15. userView->setSelectionMode(QAbstractItemView::SingleSelection);  
  16. userView->setSelectionBehavior(QAbstractItemView::SelectRows);  
  17. userView->setColumnHidden(User_Id, true);  
  18. userView->setColumnHidden(User_Pwd, true);  
  19. userView->setColumnHidden(User_Group, true);  
  20. userView->resizeColumnsToContents();  
  21. userView->horizontalHeader()->setStretchLastSection(true);  
  22.   
  23. this->m_nTotal = this->getTotal();  
  24. on_pushButton_first_clicked();  



翻页槽:

  1. void UserDialog::on_pushButton_first_clicked() //首页  
  2. {  
  3.     if(this->m_nStart == 0 && this->m_nCurPageSize == this->m_nPageSize)  
  4.         return;  
  5.   
  6.     this->m_nStart = 0;  
  7.     this->m_nCurPageSize = this->m_nTotal > this->m_nPageSize ? this->m_nPageSize : this->m_nTotal;  
  8.   
  9.     updateInfo();  
  10. }  
  11.   
  12. void UserDialog::on_pushButton_previous_clicked() //上一页  
  13. {  
  14.     if(this->m_nStart == 0 || this->m_nTotal <= 0)  
  15.         return;  
  16.   
  17.     this->m_nStart -= this->m_nPageSize;  
  18.     this->m_nCurPageSize = this->m_nPageSize;  
  19.   
  20.     updateInfo();  
  21. }  
  22.   
  23. void UserDialog::on_pushButton_next_clicked() //下一页  
  24. {  
  25.     if(this->m_nCurPageSize < this->m_nPageSize || this->m_nTotal <= 0)  
  26.         return;  
  27.   
  28.     this->m_nStart += this->m_nPageSize;  
  29.     this->m_nCurPageSize = this->m_nTotal - this->m_nStart > this->m_nPageSize ? this->m_nPageSize : this->m_nTotal - this->m_nStart;  
  30.   
  31.     updateInfo();  
  32. }  
  33.   
  34. void UserDialog::on_pushButton_last_clicked()   //尾页  
  35. {  
  36.     if(this->m_nCurPageSize < this->m_nPageSize || this->m_nTotal <= 0)  
  37.         return;  
  38.   
  39.     this->m_nCurPageSize = this->m_nTotal % this->m_nPageSize;  
  40.     this->m_nStart = this->m_nTotal - this->m_nCurPageSize;  
  41.   
  42.     updateInfo();  
  43. }  
  1. void UserDialog::updateInfo()  
  2. {  
  3.     QString strFilter = QString(" 1=1 limit %1,%2").arg(this->m_nStart).arg(this->m_nCurPageSize);  
  4.     userModel->setStart(this->m_nStart + 1);  
  5.     userModel->setFilter(strFilter);  
  6.     userModel->select();  
  7. }  



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多