如何在QComboBox上设置不可选的默认文本?

swa*_*log 15 c++ qt qcombobox

使用常规QComboBox填充项目,如果currentIndex设置为-1,则窗口小部件为空.在组合框中显示初始描述性文本(例如" - 选择国家 - "," - 选择主题 - "等)将非常有用,这些文本未在下拉列表中显示.

我在文档中找不到任何内容,也没有任何先前的答案问题.

Hos*_*ork 27

在Combo Box API中似乎没有预料到这种情况.但是由于基础模型的灵活性,您似乎应该能够将--Select Country--添加为第一个"合法"项目,然后使其不被用户选择:

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

根据您想要的精确行为,您可能希望使用setEnabled.或者我个人更喜欢它,如果它只是一个不同的颜色项目,我可以将其设置回:

Qt,如何更改QComboBox的一个项目的文本颜色?(C++)

(当我点击某些东西然后被困在我无法回到原地的地方时,我不喜欢它,即使它是一个没有选择的状态!)

  • 自 Qt 5.15 起,执行此操作的正确方法是“setPlaceholderText”,如此处所述 /sf/answers/4475622371/ (2认同)

Ayx*_*xan 5

您可以执行类似操作的一种方法是设置占位符:

comboBox->setPlaceholderText(QStringLiteral("--Select Country--"));
comboBox->setCurrentIndex(-1);
Run Code Online (Sandbox Code Playgroud)

这样你就有了一个无法选择的默认值。

在此处输入图片说明