最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt重寫QComboBox實(shí)現(xiàn)下拉展示多列數(shù)據(jù)

 更新時(shí)間:2024年11月30日 11:35:17   作者:Lydro  
這篇文章主要為大家詳細(xì)介紹了Qt如何重寫QComboBox實(shí)現(xiàn)下拉展示多列數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

需求

點(diǎn)擊QComboBox時(shí),下拉列表以多行多列的表格展示出來。

實(shí)現(xiàn)

直接上代碼:

#include <QComboBox>
#include <QTableWidget>
#include <QVBoxLayout>
#include <QWidget>
#include <QEvent>
#include <QMouseEvent>
#include <QLineEdit>
class ComboBoxWithTableWidget : public QComboBox {
    Q_OBJECT
 
public:
    ComboBoxWithTableWidget(QWidget *parent = nullptr) : QComboBox(parent) {
        // 隱藏默認(rèn)的下拉箭頭
        setEditable(true);
        lineEdit()->setReadOnly(true);
 
        // 創(chuàng)建一個(gè)隱藏的容器來存放我們的表格
        popupWidget = new QWidget(this);
        popupWidget->setWindowFlags(Qt::Popup | Qt::FramelessWindowHint);
 
        QVBoxLayout *layout = new QVBoxLayout(popupWidget);
        layout->setContentsMargins(0, 0, 0, 0);
        layout->setSpacing(0);
 
        tableWidget = new QTableWidget(5, 2, popupWidget); // 5行2列
        for (int row = 0; row < 5; ++row)
        {
            for (int col = 0; col < 2; ++col)
            {
                QTableWidgetItem *item = new QTableWidgetItem(QString("Item %1%2").arg(row).arg(col));
                tableWidget->setItem(row, col, item);
            }
        }
        tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
        tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
        layout->addWidget(tableWidget);
        popupWidget->resize(220,200);
 
        connect(tableWidget, &QTableWidget::cellClicked, this, &ComboBoxWithTableWidget::onCellClicked);
 
        popupWidget->hide();
    }
 
protected:
 
    void showPopup() override
    {
        if (popupWidget->isHidden())
        {
            QComboBox::showPopup();
 
            //popupWidget->resize(this->width(), tableWidget->height() + 2); //(可能需要調(diào)整)
            popupWidget->move(this->mapToGlobal(QPoint(0, this->height())));
            popupWidget->show();
 
            tableWidget->setFocus();
        }
    }
 
    void hidePopup() override
    {
        if (popupWidget->isVisible())
        {
            popupWidget->hide();
            QComboBox::hidePopup();
        }
    }
 
private slots:
    void onCellClicked(int row, int column)
    {
        QString text = tableWidget->item(row, column)->text();
        this->setCurrentText(text);
        hidePopup(); // 選擇后隱藏下拉列表
    }
 
private:
    QWidget *popupWidget = nullptr;
    QTableWidget *tableWidget= nullptr;
};

示例效果

到此這篇關(guān)于Qt重寫QComboBox實(shí)現(xiàn)下拉展示多列數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Qt QComboBox下拉展示多列數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c語言動(dòng)態(tài)內(nèi)存分配知識(shí)點(diǎn)及實(shí)例

    c語言動(dòng)態(tài)內(nèi)存分配知識(shí)點(diǎn)及實(shí)例

    在本篇文章里小編給大家整理的是關(guān)于c語言動(dòng)態(tài)內(nèi)存分配知識(shí)點(diǎn)及實(shí)例,需要的朋友們可以學(xué)習(xí)下。
    2020-03-03
  • C++ 單例模式兩種實(shí)現(xiàn)方式

    C++ 單例模式兩種實(shí)現(xiàn)方式

    文章介紹了單例模式的兩種實(shí)現(xiàn)方式:餓漢模式和飽漢模式(懶漢模式),并對(duì)比了它們的特性、線程安全、資源占用、啟動(dòng)速度、實(shí)現(xiàn)復(fù)雜度和性能開銷,文章還提供了代碼示例和適用場(chǎng)景建議,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • C++中const char*、char const*、char * const三者的區(qū)別

    C++中const char*、char const*、char * const三者的區(qū)別

    這篇文章主要介紹了C++中const char*、char const*、char * const三者的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++設(shè)計(jì)模式之解釋器模式

    C++設(shè)計(jì)模式之解釋器模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之解釋器模式,本文講解了什么是解釋器模式、文法規(guī)則和抽象語法樹、解釋器模式的使用場(chǎng)合等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C++?Opencv實(shí)現(xiàn)錄制九宮格視頻

    C++?Opencv實(shí)現(xiàn)錄制九宮格視頻

    這篇文章主要為大家介紹了如何利用C++和OpenCV庫實(shí)現(xiàn)錄制九宮格視頻,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)OpenCV有一定幫助,感興趣的可以了解一下
    2022-05-05
  • 五個(gè)經(jīng)典鏈表OJ題帶你進(jìn)階C++鏈表篇

    五個(gè)經(jīng)典鏈表OJ題帶你進(jìn)階C++鏈表篇

    做題之前呢,小編想提醒下大家,要三思而后行,不要一上來就嘎嘎敲代碼,要先學(xué)會(huì)自己畫圖分析,把自己的思路捋清楚,不要到時(shí)候?qū)懘a五分鐘,調(diào)試兩小時(shí),記住,編程思路很重要
    2022-03-03
  • C語言的結(jié)構(gòu)體你了解嗎

    C語言的結(jié)構(gòu)體你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C語言的結(jié)構(gòu)體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 內(nèi)核線程優(yōu)先級(jí)設(shè)置的方法介紹

    內(nèi)核線程優(yōu)先級(jí)設(shè)置的方法介紹

    本篇文章介紹了,內(nèi)核線程優(yōu)先級(jí)設(shè)置的方法。需要的朋友參考下
    2013-05-05
  • MoveWindow() SetWindowPos()的區(qū)別于聯(lián)系

    MoveWindow() SetWindowPos()的區(qū)別于聯(lián)系

    這篇文章主要介紹了VC++中MoveWindow() SetWindowPos()的區(qū)別于聯(lián)系,需要的朋友可以參考下
    2015-01-01
  • C++實(shí)現(xiàn)LeetCode(7.翻轉(zhuǎn)整數(shù))

    C++實(shí)現(xiàn)LeetCode(7.翻轉(zhuǎn)整數(shù))

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(7.翻轉(zhuǎn)整數(shù)),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

阳高县| 海阳市| 衡水市| 会泽县| 如皋市| 平谷区| 内黄县| 陵川县| 革吉县| 勐海县| 南汇区| 广东省| 民丰县| 乌拉特前旗| 江城| 麻城市| 临汾市| 榆林市| 台州市| 庆阳市| 南澳县| 河池市| 黎平县| 乌兰县| 望奎县| 德化县| 肥城市| 新龙县| 防城港市| 正宁县| 清新县| 秭归县| 临武县| 南城县| 西峡县| 河津市| 玛纳斯县| 项城市| 道真| 广西| 巫溪县|