Как установить невыбираемый текст по умолчанию на QComboBox? - PullRequest
14 голосов
/ 03 октября 2011

При использовании обычного QComboBox, заполненного элементами, если currentIndex установлено на -1, виджет пуст. Вместо этого было бы очень полезно иметь начальный описательный текст, видимый в поле со списком (например, "--Выберите страну--", "- Выберите тему--" и т. Д.), Который не отображается в раскрывающемся списке. 1004 *

Я не смог найти ничего ни в документации, ни в предыдущих вопросах с ответами.

1 Ответ

25 голосов
/ 03 октября 2011

Похоже, что случай не ожидался в 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, Как я могу изменить цвет текста одного элемента QComboBox?(C ++)

(мне не нравится, когда я нажимаю на что-то, а затем попадаю в ловушку туда, где я не могу вернуться туда, где я был, даже если ничего не выбрано-Дополнительное-состояние!)

...