91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt通用數據庫翻頁查詢如何實現

發布時間:2021-12-15 10:39:31 來源:億速云 閱讀:258 作者:iii 欄目:互聯網科技

本篇內容介紹了“Qt通用數據庫翻頁查詢如何實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、前言

在Qt與數據庫結合編程的過程中,記錄一多,基本上都需要用到翻頁查看記錄,翻頁有個好處就是可以減輕顯示數據的表格的壓力,不需要一次性將數據庫表的記錄全部顯示,也基本上沒有誰在一頁上需要一次性顯示所有記錄,搜索引擎搜索出來的結果也基本上都是翻頁顯示的,那么問題來了,有沒有一種通用的辦法可以只需要傳入表名和查詢條件自動翻頁呢,答案是肯定的,Qt對數據庫操作的封裝也是相當完美的,顯示也是如此,為此特意封裝成了一個類,直接用就行。

主要功能:

  1. 自動按照設定的每頁多少行數據分頁

  2. 只需要傳入表名/字段集合/每頁行數/翻頁指示按鈕/文字指示標簽

  3. 提供公共靜態方法綁定字段數據到下拉框

  4. 建議條件字段用數字類型的主鍵,速度極快

  5. 增加線程查詢符合條件的記錄總數,數據量巨大時候不會卡主界面

  6. 提供查詢結果返回信號,包括當前頁/總頁數/總記錄數/查詢用時

  7. 可設置所有列或者某一列對齊樣式例如居中或者右對齊

  8. 可設置增加一列,列的位置,標題,寬度

  9. 可設置要查詢的字段集合

二、代碼思路

void DbPage::bindData(const QString &sql)
{
    queryModel->setQuery(sql, QSqlDatabase::database(connName));
    tableView->setModel(queryModel);

    //依次設置列標題列寬
    int columnCount = tableView->model()->columnCount();
    int nameCount = columnNames.count();
    columnCount = columnCount > nameCount ? nameCount : columnCount;

    QList<QString> columnNames = this->columnNames;
    QList<int> columnWidths = this->columnWidths;

    //根據設置添加新列,將對應新列的標題名稱和寬度按照索引位置插
    if (insertColumnIndex >= 0) {
        columnCount++;
        columnNames.insert(insertColumnIndex, insertColumnName);
        columnWidths.insert(insertColumnIndex, insertColumnWidth);
        queryModel->insertColumn(insertColumnIndex);
    }

    //設置列標題和列寬度
    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));
    }

    //發送結果信號
    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;

    //不存在余數,說明是整行,例如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增加翻頁按鈕可用不可用處理,如果只有一頁數據,則翻頁按鈕不可用
    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通用數據庫翻頁查詢如何實現

“Qt通用數據庫翻頁查詢如何實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt
AI

搜索| 盘锦市| 石泉县| 呈贡县| 平昌县| 资溪县| 昭苏县| 信阳市| 拉萨市| 扎兰屯市| 仁怀市| 保德县| 上杭县| 宜宾市| 安西县| 米泉市| 沧州市| 长岭县| 南江县| 汉川市| 启东市| 绥化市| 扎兰屯市| 井陉县| 桦甸市| 承德县| 银川市| 绥德县| 武隆县| 通榆县| 巴马| 会东县| 梅河口市| 丰宁| 临邑县| 逊克县| 贵港市| 海阳市| 河津市| 林州市| 高尔夫|