欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Qt實(shí)現(xiàn)文本文件的讀寫操作

    使用Qt實(shí)現(xiàn)文本文件的讀寫操作

    在現(xiàn)代應(yīng)用程序開發(fā)中,文件操作是一個(gè)不可或缺的任務(wù),無論是讀取配置文件、處理用戶輸入,還是保存日志信息,文件的讀取和寫入操作都非常重要,本文我們將展示如何通過一個(gè)簡單的圖形用戶界面(GUI),利用QFile、QTextStream和QFileDialog類來高效地進(jìn)行文件操作
    2024-06-06
  • 詳解C++ 內(nèi)存對齊

    詳解C++ 內(nèi)存對齊

    這篇文章主要介紹了C++ 內(nèi)存對齊的相關(guān)資料,幫助大家更好的理解和使用c++編程語言,感興趣的朋友可以了解下
    2021-01-01
  • C++中內(nèi)存池和內(nèi)存分配區(qū)Arena概念詳解

    C++中內(nèi)存池和內(nèi)存分配區(qū)Arena概念詳解

    在 C++ 中,內(nèi)存分配區(qū)(Arena)通常指的是預(yù)先分配的一大塊連續(xù)內(nèi)存空間,這種方法的主要目的是提高內(nèi)存分配和釋放的效率,下面就跟隨小編一起了解一下C++中內(nèi)存池和內(nèi)存分配區(qū)Arena相關(guān)概念吧
    2023-12-12
  • C語言中的const如何保證變量不被修改

    C語言中的const如何保證變量不被修改

    這篇文章主要給大家介紹了關(guān)于C語言中const如何保證變量不被修改的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 淺析iterator與指針的區(qū)別

    淺析iterator與指針的區(qū)別

    指針和iterator都支持減法運(yùn)算,指針-指針得到的是兩個(gè)指針之間的距離,迭代器-迭代器得到的是兩個(gè)迭代器之間的距離
    2013-10-10
  • C++哈希應(yīng)用的位圖和布隆過濾器

    C++哈希應(yīng)用的位圖和布隆過濾器

    這篇文章主要介紹了C++哈希應(yīng)用的位圖和布隆過濾器的相關(guān)資料,文章內(nèi)容多以列舉試題的方式講解,感興趣的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • C++簡單實(shí)現(xiàn)Dijkstra算法

    C++簡單實(shí)現(xiàn)Dijkstra算法

    這篇文章主要為大家詳細(xì)介紹了C++簡單實(shí)現(xiàn)Dijkstra算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 關(guān)于STL中set容器的一些總結(jié)

    關(guān)于STL中set容器的一些總結(jié)

    關(guān)于set,必須說明的是set關(guān)聯(lián)式容器。set作為一個(gè)容器也是用來存儲同一數(shù)據(jù)類型的數(shù)據(jù)類型,并且能從一個(gè)數(shù)據(jù)集合中取出數(shù)據(jù),在set中每個(gè)元素的值都唯一,而且系統(tǒng)能根據(jù)元素的值自動進(jìn)行排序
    2013-09-09
  • C語言實(shí)現(xiàn)停車場管理

    C語言實(shí)現(xiàn)停車場管理

    這篇文章主要為大家詳細(xì)介紹了C語言課程設(shè)計(jì)之停車場管理問題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C/C++ Socket設(shè)置接收超時(shí)時(shí)間的多種方法

    C/C++ Socket設(shè)置接收超時(shí)時(shí)間的多種方法

    網(wǎng)絡(luò)編程中經(jīng)常需要處理的一個(gè)問題就是如何正確地處理Socket超時(shí),對于C/C++,有幾種常用的技術(shù)可以用來設(shè)置Socket接收超時(shí)時(shí)間,在這篇文章中,我們將詳細(xì)介紹如何在C/C++中設(shè)置Socket的非阻塞模式以及如何配置接收超時(shí)時(shí)間,需要的朋友可以參考下
    2024-01-01

最新評論