2011-10-03 19 views
11

Używając zwykłego QComboBox wypełnionego przedmiotami, jeśli currentIndex jest ustawiony na -1, widget jest pusty. Byłoby bardzo użyteczne, aby zamiast tego mieć początkowy opisowy tekst widoczny w polu złożonym (np. "- Wybierz kraj--", "--Wybierz temat -" itd.), Który nie jest pokazany na liście rozwijanej.Jak ustawić niewybaczalny domyślny tekst na QComboBox?

Nie znalazłem niczego w dokumentacji ani żadnych poprzednich pytań z odpowiedziami.

Odpowiedz

21

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!)

+0

Ś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

+0

@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

Powiązane problemy