Qt工作笔记-使用SQL中的LIMIT进行数据分页
生活随笔
收集整理的這篇文章主要介紹了
Qt工作笔记-使用SQL中的LIMIT进行数据分页
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
?
?
概念
操作
?
?
概念
這里使用SQL語言的中LIMIT的特點進行分頁顯示。這個關鍵字我就不多說了,現在來看運行截圖!
表結構如下:
程序一開始運行:
分頁顯示:
?
?
操作
關鍵源碼如下:
sql.h
#ifndef SQL_H #define SQL_H#include <QSqlDatabase>class SQL { public:SQL();QVector<QStringList> limitSql(const int &start = 0, const int &num = 0);int getCount();private:QSqlDatabase m_db; };#endif // SQL_Hwidget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>class SQL;namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();protected:void updateBtnStatus();void setTreeWidget();protected slots:void valueChange(int num);void upBtnClicked();void downBtnClicked();private:Ui::Widget *ui;SQL *m_sql;int m_count;int m_currentPage;int m_numInPage;int m_countPage; };#endif // WIDGET_Hmain.cpp
#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }sql.cpp
#include "sql.h" #include <QDebug> #include <QSqlRecord> #include <QVector> #include <QSqlQuery> #include <QSqlError>SQL::SQL() {m_db = QSqlDatabase::addDatabase("QMYSQL");m_db.setHostName("192.1.101.177");m_db.setPort(3306);m_db.setUserName("root");m_db.setPassword("root");m_db.setDatabaseName("testdb");if(!m_db.open()){qDebug() << "m_db open failed " << m_db.lastError().text();return;} }QVector<QStringList> SQL::limitSql(const int &start, const int &num) {QVector<QStringList> listVec;QString cmd = QString("SELECT id, value1, value2 FROM test LIMIT %1,%2").arg(start).arg(num);QSqlQuery sqlQuery;QStringList headList;if(!sqlQuery.exec(cmd))return listVec;//獲得頭QSqlRecord sqlRecord(sqlQuery.record());for(int i = 0; i < sqlRecord.count(); i++){headList << sqlRecord.fieldName(i);}listVec.append(headList);while(sqlQuery.next()){QStringList strList;for(int i = 0; i < headList.size(); i++){strList << sqlQuery.value(headList[i]).toString();}listVec.append(strList);}return listVec;}int SQL::getCount() {QString cmd = QString("SELECT count(*) FROM test");QSqlQuery sqlQuery;QStringList headList;if(!sqlQuery.exec(cmd))return -1;QSqlRecord sqlRecord(sqlQuery.record());for(int i = 0; i < sqlRecord.count(); i++){headList << sqlRecord.fieldName(i);}while(sqlQuery.next()){for(int i = 0; i < headList.size(); i++){return sqlQuery.value(headList[i]).toInt();}}return -1; }widget.cpp
#include "widget.h" #include "ui_widget.h" #include "sql.h" #include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);m_sql = new SQL;m_count = m_sql->getCount();ui->countLabel->setText(QString::number(m_count) + " 行");m_currentPage = 1;m_countPage = 1;m_numInPage = 0;updateBtnStatus();this->setWindowTitle("CSDN IT1995");connect(ui->numSpinBox, SIGNAL(valueChanged(int)), this, SLOT(valueChange(int)));connect(ui->upPushButton, SIGNAL(clicked()), this, SLOT(upBtnClicked()));connect(ui->downPushButton, SIGNAL(clicked()), this, SLOT(downBtnClicked())); }Widget::~Widget() {delete ui; }void Widget::updateBtnStatus() {if(ui->numSpinBox->value() == 0){ui->upPushButton->setEnabled(false);ui->downPushButton->setEnabled(false);return;}//if(m_currentPage < m_countPage && m_currentPage != 1){qDebug() << "m_countPage:" << m_countPage;if(m_currentPage == m_countPage){ui->downPushButton->setEnabled(false);ui->upPushButton->setEnabled(true);}else if(m_currentPage == 1){ui->downPushButton->setEnabled(true);ui->upPushButton->setEnabled(false);}else{ui->upPushButton->setEnabled(true);ui->downPushButton->setEnabled(true);// ui->downPushButton->setEnabled(false); // ui->upPushButton->setEnabled(true);} }void Widget::setTreeWidget() {int start = (m_currentPage - 1) * m_numInPage;int num = m_numInPage;QVector<QStringList> localLimitSql = m_sql->limitSql(start, num);ui->treeWidget->clear();if(localLimitSql.size() == 0){qDebug() << "The localLimitSql.size() is 0";return;}ui->treeWidget->setHeaderLabels(localLimitSql[0]);for(int i = 1; i < localLimitSql.size(); i++){QTreeWidgetItem *item = new QTreeWidgetItem;item->setText(0, localLimitSql[i][0]);item->setText(1, localLimitSql[i][1]);item->setText(2, localLimitSql[i][2]);ui->treeWidget->insertTopLevelItem(i - 1, item);} }void Widget::valueChange(int num) {m_numInPage = ui->numSpinBox->value();updateBtnStatus();if(num == 0){return;}int page = ceil(m_count / (double)num);ui->pageLabel->setText("1/" + QString::number(page));m_countPage = page;setTreeWidget(); }void Widget::upBtnClicked() {m_currentPage--;updateBtnStatus();qDebug() << "upBtnClicked the m_currentPage is " << m_currentPage;setTreeWidget();ui->pageLabel->setText(QString::number(m_currentPage) + "/" + QString::number(m_countPage)); }void Widget::downBtnClicked() {m_currentPage++;updateBtnStatus();qDebug() << "downBtnClicked the m_currentPage is " << m_currentPage;setTreeWidget();ui->pageLabel->setText(QString::number(m_currentPage) + "/" + QString::number(m_countPage)); }sql文件在下下面的文件中下載。
源碼下載地址:https://github.com/fengfanchen/Qt/tree/master/MysqlPageQt
總結
以上是生活随笔為你收集整理的Qt工作笔记-使用SQL中的LIMIT进行数据分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java web中使用JQuery加载某
- 下一篇: Linux工作笔记-查看某程序安装路径及