Qt编写自定义控件:自定义弹出列表的QComboBox

本文介绍如何创建一个结合QComboBox(下拉框)和QTableView(表格视图)的控件,通过QStandardItemModel实现数据交互,并展示了一个实例,包括隐藏表头、按钮组操作与实时联动。
摘要由CSDN通过智能技术生成

代码:

#ifndef TABLECOMBOBOX_H
#define TABLECOMBOBOX_H

#include <QComboBox>
#include <QTableView>

class comboBoxTableView : public QTableView
{
public:
    comboBoxTableView(QComboBox *parent);
};

class tableComboBox : public QComboBox
{
public:
    tableComboBox(QWidget * parent = nullptr);
};

#endif // TABLECOMBOBOX_H
#include "tablecombobox.h"
#include <QStandardItemModel>
#include <QPushButton>
#include <QHeaderView>
#include <QDebug>
#include <QButtonGroup>
#include <QLineEdit>

comboBoxTableView::comboBoxTableView(QComboBox *parent):
    QTableView (parent)
{
    this->horizontalHeader()->hide();
    this->verticalHeader()->hide();
    this->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

    auto model = new QStandardItemModel(this);
    model->setColumnCount(3);
    model->setRowCount(3);
    this->setModel(model);

    QList<QPushButton *> list;
    QButtonGroup * btnGroup = new QButtonGroup(this);

    for (int i = 1;i < 10;++i)
    {
        QPushButton * btn = new QPushButton(this);
        btn->setCheckable(true);
        btn->setStyleSheet(QString("QPushButton{color:#ffffff;padding:6px 10px 6px 10px;background-color:#00beac;font-size:24px;border-radius:6px;}"
                                   "QPushButton:hover{background-color:#20c9b3;}"
                                   "QPushButton:pressed{background-color:#01968c;}"
                                   "QPushButton:checked{background-color:red;}"));
        btn->setText(QString("%1").arg(i));
        list << btn;
        btnGroup->addButton(btn);
        connect(btn,&QPushButton::toggled,[=]
        {
            parent->setCurrentText(btn->text());
        });
    }
    btnGroup->setExclusive(true);

    for (int i = 0;i < 3;++i)
    {
        for (int j = 0;j < 3;++j)
        {
            model->setItem(i, j, new QStandardItem());
            this->setIndexWidget(model->index(i,j),list[i * 3 + j]);
        }
    }
}

tableComboBox::tableComboBox(QWidget *parent):
    QComboBox (parent)
{
    auto view = new comboBoxTableView(this);
    this->setModel(view->model());
    this->setView(view);
    setEditable(true);
    lineEdit()->setReadOnly(true);
    setStyleSheet("QComboBox{border-radius: 6px;border: 1px solid #00bcd4;padding:6px 10px 6px 10px;font-size:28px;color: #000000;selection-background-color: #00beac;}");
}

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值