Qt自定义控件学习–Combox
问题由来:
近期又继续Qt项目,对于combox有一个奇怪的需求:
- combox中文本框文字始终显示为1
- 下拉后,combox list中需要显示2,3;其中2,3为1的一个子选项
- 当选择2,3时执行相应的操作
例:
选择: -选择选中 -选择所有
即,下面两个选项为上面的子选项。
由于大部分都和Combox行为类似,所以想复用Combox。
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