2011-10-03 43 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

相關問題