您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Qt通用數(shù)據(jù)庫翻頁查詢?nèi)绾螌崿F(xiàn)”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
在Qt與數(shù)據(jù)庫結(jié)合編程的過程中,記錄一多,基本上都需要用到翻頁查看記錄,翻頁有個好處就是可以減輕顯示數(shù)據(jù)的表格的壓力,不需要一次性將數(shù)據(jù)庫表的記錄全部顯示,也基本上沒有誰在一頁上需要一次性顯示所有記錄,搜索引擎搜索出來的結(jié)果也基本上都是翻頁顯示的,那么問題來了,有沒有一種通用的辦法可以只需要傳入表名和查詢條件自動翻頁呢,答案是肯定的,Qt對數(shù)據(jù)庫操作的封裝也是相當(dāng)完美的,顯示也是如此,為此特意封裝成了一個類,直接用就行。
主要功能:
自動按照設(shè)定的每頁多少行數(shù)據(jù)分頁
只需要傳入表名/字段集合/每頁行數(shù)/翻頁指示按鈕/文字指示標(biāo)簽
提供公共靜態(tài)方法綁定字段數(shù)據(jù)到下拉框
建議條件字段用數(shù)字類型的主鍵,速度極快
增加線程查詢符合條件的記錄總數(shù),數(shù)據(jù)量巨大時候不會卡主界面
提供查詢結(jié)果返回信號,包括當(dāng)前頁/總頁數(shù)/總記錄數(shù)/查詢用時
可設(shè)置所有列或者某一列對齊樣式例如居中或者右對齊
可設(shè)置增加一列,列的位置,標(biāo)題,寬度
可設(shè)置要查詢的字段集合
void DbPage::bindData(const QString &sql) { queryModel->setQuery(sql, QSqlDatabase::database(connName)); tableView->setModel(queryModel); //依次設(shè)置列標(biāo)題列寬 int columnCount = tableView->model()->columnCount(); int nameCount = columnNames.count(); columnCount = columnCount > nameCount ? nameCount : columnCount; QList<QString> columnNames = this->columnNames; QList<int> columnWidths = this->columnWidths; //根據(jù)設(shè)置添加新列,將對應(yīng)新列的標(biāo)題名稱和寬度按照索引位置插 if (insertColumnIndex >= 0) { columnCount++; columnNames.insert(insertColumnIndex, insertColumnName); columnWidths.insert(insertColumnIndex, insertColumnWidth); queryModel->insertColumn(insertColumnIndex); } //設(shè)置列標(biāo)題和列寬度 for (int i = 0; i < columnCount; i++) { queryModel->setHeaderData(i, Qt::Horizontal, columnNames.at(i)); tableView->setColumnWidth(i, columnWidths.at(i)); } if (labPageCurrent != 0) { labPageCurrent->setText(QString("第 %1 頁").arg(pageCurrent)); } if (labPageCount != 0) { labPageCount->setText(QString("共 %1 頁").arg(pageCount)); } if (labResultCount != 0) { labResultCount->setText(QString("共 %1 條").arg(resultCount)); } if (labResultCurrent != 0) { labResultCurrent->setText(QString("每頁 %1 條").arg(resultCurrent)); } if (labInfo != 0) { labInfo->setText(QString("共 %1 條 每頁 %2 條 共 %3 頁 第 %4 頁").arg(resultCount).arg(resultCurrent).arg(pageCount).arg(pageCurrent)); } //發(fā)送結(jié)果信號 emit receivePage(pageCurrent, pageCount, resultCount, resultCurrent); } void DbPage::slot_receiveCount(quint32 count, double msec) { if (labResult != 0) { labResult->setText(QString("查詢用時 %1 秒").arg(QString::number(msec / 1000, 'f', 3))); } resultCount = count; int yushu = resultCount % resultCurrent; //不存在余數(shù),說明是整行,例如300%5==0 if (yushu == 0) { if (resultCount > 0 && resultCount < resultCurrent) { pageCount = 1; } else { pageCount = resultCount / resultCurrent; } } else { pageCount = (resultCount / resultCurrent) + 1; } //2014-10-9增加翻頁按鈕可用不可用處理,如果只有一頁數(shù)據(jù),則翻頁按鈕不可用 if (pageCount <= 1) { btnFirst->setEnabled(false); btnLast->setEnabled(false); btnNext->setEnabled(false); btnPre->setEnabled(false); } else { btnFirst->setEnabled(true); btnLast->setEnabled(true); btnNext->setEnabled(true); btnPre->setEnabled(true); } tempSql = QString("select %1 from %2 %3 order by %4").arg(selectColumn).arg(tableName).arg(whereSql).arg(orderSql); sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent); //組織分頁SQL語句 bindData(sql); } void DbPage::first() { if (pageCount > 1) { startIndex = 0; pageCurrent = 1; sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent); bindData(sql); btnLast->setEnabled(true); btnNext->setEnabled(true); } btnFirst->setEnabled(false); btnPre->setEnabled(false); } void DbPage::previous() { if (pageCurrent > 1) { pageCurrent--; startIndex -= resultCurrent; sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent); bindData(sql); btnLast->setEnabled(true); btnNext->setEnabled(true); } if (pageCurrent == 1) { btnFirst->setEnabled(false); btnPre->setEnabled(false); } } void DbPage::next() { if (pageCurrent < pageCount) { pageCurrent++; startIndex += resultCurrent; sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent); bindData(sql); btnFirst->setEnabled(true); btnPre->setEnabled(true); } if (pageCurrent == pageCount) { btnLast->setEnabled(false); btnNext->setEnabled(false); } } void DbPage::last() { if (pageCount > 0) { startIndex = (pageCount - 1) * resultCurrent; pageCurrent = pageCount; sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent); bindData(sql); btnFirst->setEnabled(true); btnPre->setEnabled(true); } btnLast->setEnabled(false); btnNext->setEnabled(false); }
“Qt通用數(shù)據(jù)庫翻頁查詢?nèi)绾螌崿F(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。