Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 是否可以仅突出显示当前QComboBox选择的文本?_Qt_Selection_Highlight_Qcombobox_Selectedtext - Fatal编程技术网

Qt 是否可以仅突出显示当前QComboBox选择的文本?

Qt 是否可以仅突出显示当前QComboBox选择的文本?,qt,selection,highlight,qcombobox,selectedtext,Qt,Selection,Highlight,Qcombobox,Selectedtext,我只想突出显示当前QComboBox选择的文本,而不是整个区域 直到向下箭头。为了更好地说明这一点,我想要如下内容: 与此相反: 这可能吗?如果是,怎么做?我在网上搜索,尝试了几件事,但都没能成功。有什么想法或建议吗?提前感谢。您描述的是可编辑组合框的默认行为。在这种情况下,只需设置 QComboBox* box = new QComboBox(); box->setEditable(true); 如果您不想让QComboBox可编辑,那么它是不直观的,但您想做的事情仍然可以完成 如果

我只想突出显示当前QComboBox选择的文本,而不是整个区域

直到向下箭头。为了更好地说明这一点,我想要如下内容:

与此相反:


这可能吗?如果是,怎么做?我在网上搜索,尝试了几件事,但都没能成功。有什么想法或建议吗?提前感谢。

您描述的是可编辑组合框的默认行为。在这种情况下,只需设置

QComboBox* box = new QComboBox();
box->setEditable(true);
如果您不想让
QComboBox
可编辑,那么它是不直观的,但您想做的事情仍然可以完成

如果将
QComboBox
设置为可编辑,同时将基础行编辑设置为只读,则高亮显示将与图片中的一样,但不会有任何光标,用户将无法编辑组合框项目。下面是一个例子:

QComboBox* box = new QComboBox();
box->addItems(QStringList() << "None (Min Profit)" << "All (Max Profit)");
box->setEditable(true);
box->lineEdit()->setReadOnly(true);

// c++11 style, but this can also be done using SIGNAL(...) and SLOT(...)
connect(box, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), [box]
{
    box->lineEdit()->selectAll();
});
QComboBox*box=新的QComboBox();
框->附加项(QStringList()lineEdit()->setReadOnly(true);
//c++11样式,但也可以使用信号(…)和插槽(…)
连接(长方体、静态_转换(&QComboBox::已激活),[box]
{
框->lineEdit()->>selectAll();
});
这是结果的图像(我在Windows 10上,所以样式有点滑稽)


我的2美分:虽然可以这样做,但是默认的Qt高亮显示方案对于用户来说对于不可编辑的项目可能更直观。

由于Qt 5.7和C++14,您可以在
连接中使用比
静态模式更可读的模式:
连接(box,qOverload(&QComboBox::activated),[box]{box->lineEdit()->selectAll()});