Qt -设置不可编辑的QComboBox的显示文本
Qt - Set display text of non-editable QComboBox
我想将QComboBox的文本设置为一些自定义文本(不在QComboBox的列表中),而不将此文本添加为QComboBox的项。这种行为可以在带有QComboBox::setEditText(const QString & text)
的可编辑QComboBox上实现。但是,在不可编辑的QComboBox上,此函数不执行任何操作。
是否可以通过编程方式将不可编辑的QComboBox的显示/编辑文本设置为不在其列表中的内容?或者我必须找到另一种方式(例如使用带有弹出式菜单的QPushButton)
编辑:考虑一个带有InsertPolicy
QComboBox::NoInsert
的可编辑QComboBox。如果用户键入某些内容并按enter键,则将使用输入的值,但不会添加到列表中。我想要的是这种行为以编程方式改变"当前"文本,但不允许用户自己输入一些文本。用户可以从QComboBox中选择一些内容,但过了一段时间,我可能想要覆盖'current'文本。
当我子类化QComboBox
以使复选框的组合框时,我遇到了同样的问题。我编写了一个小函数以编程方式更改组合框中显示的文本,但是我不想让用户能够编辑该文本。解决方案是将组合框设置为可编辑的:
this->setEditable(true);
和QComboBox::lineEdit()
设置为只读。参考函数:
void CheckedComboBox::setText(QString text)
{
QLineEdit *displayedText = this->lineEdit();
displayedText->setText(text);
displayedText->setReadOnly(true);
}
重新实现paintEvent: https://github.com/qt/qtbase/blob/28d1d19a526148845107b631612520a3524b402b/src/widgets/widgets/qcombobox.cpp#L2995
opt.currentText = QString(tr("My Custom Text"));
例子:
QCustomCheckComboBoxFilter.h
...
protected:
void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
...
QCustomCheckComboBoxFilter.cpp
...
void QCustomCheckComboBoxFilter::paintEvent(QPaintEvent *)
{
QStylePainter painter(this);
painter.setPen(palette().color(QPalette::Text));
// draw the combobox frame, focusrect and selected etc.
QStyleOptionComboBox opt;
initStyleOption(&opt);
opt.currentText = QString(tr("My Custom Text"));
painter.drawComplexControl(QStyle::CC_ComboBox, opt);
// draw the icon and text
painter.drawControl(QStyle::CE_ComboBoxLabel, opt);
}
...
我假设你想有一个组合框,"a","B","C"作为实际数据和"这是a","这是B"answers"这是c",如QComboBox中显示的。下面是代码:
box.addItems(QStringList () << "This is A"<< "This is B"<< "This is C");
box.setItemData(0, "A");
box.setItemData(1, "B");
box.setItemData(2, "C");
您可以使用以下代码获取实际数据:
QString actual = box.itemData(0).toString();//actual will be = "A";
qDebug()<<actual;//"A"
注意:您几乎可以为组合框Item设置所需的所有数据类型。更重要的是,您可以使用setItemData的第三个参数为每个项目设置不止一个附加数据。
我最终使用了一个带有弹出菜单的QPushButton
。我将QComboBox
列表中的项目作为QActions
添加到菜单中。菜单可以用
QPushButton
上设置QPushButton::setMenu(QMenu* menu)
。按钮上的文字可以很容易地用
设置。QPushButton::setText(const QString &)
与弹出式菜单中的文本无关,这正是我想要的。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 在自定义树视图中显示QCOMBOBOX向下箭头
- 始终在QTableView的单元格中显示Qcombobox
- QTreeWidget 不显示 QCombobox 委托
- 如何为 QComboBox 的弹出菜单指定与框本身中显示的不同的字符串?
- 使用Qt中的QComboBox隐藏并显示lineEdit
- 将QListView添加到QComboBox以正确显示滚动条
- Qt -设置不可编辑的QComboBox的显示文本
- Qt:如何在QTableWidgetItem中显示QComboBox
- QComboBox 不显示其项目列表
- 如何在QComboBox项目中显示上标