Qt自定义Combox(类似单选按钮功能)

本文介绍如何在Qt中自定义QCombobox,使其具备类似单选按钮的功能。需求是Combox文本始终显示'1',下拉列表显示'2'和'3',选择2或3时执行特定操作。通过研究QCombobox的model机制,成功实现了这个功能。文章详细讲解了自定义model和重置显示内容的方法。
摘要由CSDN通过智能技术生成

Qt自定义控件学习–Combox

问题由来:

近期又继续Qt项目,对于combox有一个奇怪的需求:
- combox中文本框文字始终显示为1
- 下拉后,combox list中需要显示2,3;其中2,3为1的一个子选项
- 当选择2,3时执行相应的操作
例:

 选择:
-选择选中
-选择所有

即,下面两个选项为上面的子选项。
由于大部分都和Combox行为类似,所以想复用Combox。

QCombobox

首先讲下基本的QCombobox:

基本QCombobox使用
用法相对比较简单,使用默认设置新建一个Qt Wiget Application,加进一个QCombobox,通过上面设置即可。
以上默认QCombobox不能满足我的需求,想了一个简单方法:
在列表中仅仅加入”2”,”3”,最后在combox中设置text:代码如下

ui->comboBox->addItem("2");
ui->comboBox->addItem("3");

ui->comboBox->setCurrentText("1");

悲剧~~ 失败了,并没有在列表框中展示出”1”,遂查看源码:

void QComboBox::setCurrentText(const QString &text)
{
    if (isEditable()) {
        setEditText(text);
    } else {
        const int i = findText(text);
        if (i > -1)
            setCurrentIndex(i);
    }
}

由源码中可知QCombobox会进行查找text,最终调用setCurrentIndex,可以知道text不在原始数据中不能设置进QCombobox~~
进而研究setCurrentIndex:

void QComboBox::setCurrentIndex(int index)
{
    Q_D(QComboBox);
    QModelIndex mi = d->model->index(index, d->modelColumn, d->root);
    d->setCurrentIndex(mi);
}

最终通过setCurrentIndex来进行设置,这些完全是由model来进行控制的,是不有一种机制插入一个额外的modelindex,而正常在list中不显示呢???
于是进行尝试······

QCombobox使用Model

由于查看Qt相关帮助,QCombobox并不能直接满足要求,细细研究发现,QCombobox可以设置一个model

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值