Wygląda na to, że skrzynka nie była przewidywana w interfejsie API Combo Box. Ale z podstawową elastyczność modelu wydaje się, powinieneś być w stanie dodać --wybierz kraj-- jako pierwszy „legalnego” pozycji, a następnie zachować go przed możliwością wyboru przez użytkownika:
QStandardItemModel* model =
qobject_cast<QStandardItemModel*>(comboBox->model());
QModelIndex firstIndex = model->index(0, comboBox->modelColumn(),
comboBox->rootModelIndex());
QStandardItem* firstItem = model->itemFromIndex(firstIndex);
firstItem->setSelectable(false);
W zależności od tego, co precyzyjne zachowanie, które chcesz, możesz zamiast tego użyć setEnabled
. Albo ja osobiście wolę go, jeśli to był tylko kolor inny element, który może ustawić go z powrotem do:
Qt, How do I change the text color of one item of a QComboBox? (C++)
(nie lubię go, gdy klikam na coś, a potem zostają uwięzione na gdzie nie mogę wrócić tam, gdzie byłem, nawet jeśli to nic nie wybrano-jeszcze-państwo!)
Świetnie! Widocznie część Qt, której nie dotknąłem, wydaje się bardzo przydatna do personalizacji. Z pytania SO, z którym się łączyłeś, zmiana koloru tła sprawia, że wygląda on bardzo ładnie i prawdopodobnie lepiej niż pierwotnie sobie wyobrażałem. firstItem-> setData (Qt :: lightGray, Qt :: BackgroundRole); (Nie miałbym nic przeciwko, jeśli dodałeś to do swojej odpowiedzi). – swalog
@EXIT_FAILURE Myślę, że twój komentarz obejmuje Twoją alternatywę, ponieważ nie próbowałem tego, więc nie wiem, czy by mi się to podobało. :) Ale tak, Qt oferuje pewną oryginalność, jeśli wszyscy będziemy w zespole, może uda nam się zatrzymać GTK i wxWidgets! : -/http://stackoverflow.com/questions/7545804/modeless-parentless-wxdialog-still-always-above-wxframe-window-in-z-order/ – HostileFork