2011-10-03 293 views
11

使用填充项目的常规QComboBox,如果currentIndex设置为-1,则窗口小部件为空。如果在组合框中显示最初的描述性文本(例如“ - 选择国家 - ”,“ - 选择主题 - ”等)而不在下拉列表中显示将是非常有用的。如何在QComboBox上设置不可选的默认文本?

我找不到任何文档,也没有任何以前的问题与答案。

回答

21

在Combo Box API中未出现预期的情况。但随着底层模型的灵活性,看来你应该能够添加- 选择国家 -作为第一个“合法”的项目,然后把它从被用户选择:

QStandardItemModel* model = 
     qobject_cast<QStandardItemModel*>(comboBox->model()); 
QModelIndex firstIndex = model->index(0, comboBox->modelColumn(), 
     comboBox->rootModelIndex()); 
QStandardItem* firstItem = model->itemFromIndex(firstIndex); 
firstItem->setSelectable(false); 

根据什么准确的行为,你可能想用setEnabled来代替。或者,我个人更喜欢它,如果它只是我可以将其设置回不同的颜色项目:

Qt, How do I change the text color of one item of a QComboBox? (C++)

(我不喜欢它,当我点击的东西,然后得到被困在那里我不能回到我所在的地方,即使它是一个没有选择的状态!)

+0

非常棒!显然,我没有碰过Qt的一部分,这对于定制非常有用。从你链接到的SO问题,改变背景颜色使它看起来非常好,可能比我最初设想的更好。 firstItem-> setData(Qt :: lightGray,Qt :: BackgroundRole); (我不介意你把这个添加到你的答案中)。 – swalog

+0

@EXIT_FAILURE我认为你的评论涵盖了你的选择,因为我没有尝试过,所以我不知道我是否喜欢它。 :)但是,是的,Qt提供了一些独创性,如果我们全部合起来,也许我们可以阻止GTK和wxWidgets! : -/http://stackoverflow.com/questions/7545804/modeless-parentless-wxdialog-still-always-above-wxframe-window-in-z-order/ – HostileFork

相关问题