Qt - 设置不可编辑的 QComboBox 的显示文本

Pri*_*eys 6 c++ qt qcombobox

我想将 QComboBox 的文本设置为一些自定义文本(不在 QComboBox 的列表中),而不将此文本添加为​​ QComboBox 的项目。此行为可在带有QComboBox::setEditText(const QString & text). 但是,在不可编辑的 QComboBox 上,此函数不执行任何操作。

是否可以以编程方式将不可编辑的 QComboBox 的显示/编辑文本设置为不在其列表中的内容?还是我必须找到另一种方式(例如使用带有弹出菜单的 QPushButton)

编辑:考虑一个可编辑的 QComboBox 与InsertPolicy QComboBox::NoInsert. 如果用户输入内容并按回车键,输入的值将被使用但不会添加到列表中。我想要的是这种行为以编程方式更改“当前”文本,但不允许用户自己输入一些文本。用户可以从 QComboBox 中选择一些内容,但一段时间后,我可能想要覆盖“当前”文本。

Jay*_*ays 5

当我子类化QComboBox以制作复选框的组合框时,我遇到了同样的问题。我编写了一个小函数来以编程方式更改组合框中显示的文本,但我不想让用户能够编辑该文本。解决方案是将组合框设置为可编辑:

 this->setEditable(true);
Run Code Online (Sandbox Code Playgroud)

QComboBox::lineEdit()只读。参考函数:

void CheckedComboBox::setText(QString text)
{
   QLineEdit *displayedText = this->lineEdit();
   displayedText->setText(text);
   displayedText->setReadOnly(true);
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这有效。不幸的是,UI 由于“setEditable”而发生了很大变化(至少在 Mac 上它发生了变化)。 (2认同)

Pri*_*eys 1

我最终使用了QPushButton带有弹出菜单的。QComboBox我将我的列表中的项目添加QActions到菜单中。QPushButton可以在 a上设置菜单

QPushButton::setMenu(QMenu* menu)
Run Code Online (Sandbox Code Playgroud)

。按钮上的文本可以轻松设置

QPushButton::setText(const QString &)
Run Code Online (Sandbox Code Playgroud)

并且与弹出菜单中的文本无关,这正是我想要的。