下拉列表中选择项的QComboBox样式
QComboBox style for choosen item in drop-down list
我想在组合框的下拉菜单中设置突出显示所选项目的样式。
与其他问题的不同之处在于,我不想为 "selected" 项设置样式(悬停在上方),而是要为已经选择的项设置样式。
默认是在文本上绘制的某种勾号。我希望所选项目具有粗体文本且没有勾号。
或者在最坏的情况下,将文本向右移动,使勾号正确可见。
我有的是这个:
注意第 17 个项目,它在数字 17 上打了勾。
这是我的样式表:
QComboBox
{
subcontrol-origin: padding;
subcontrol-position: top right;
selection-background-color: #111;
selection-color: yellow;
color: white;
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646);
border-style: solid;
border: 1px solid #1e1e1e;
border-radius: 5;
padding: 1px 0px 1px 20px;
}
QComboBox:hover, QPushButton:hover
{
border: 1px solid yellow;
color: white;
}
QComboBox:editable {
background: red;
color: pink;
}
QComboBox:on
{
padding-top: 0px;
padding-left: 0px;
color: white;
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d2d2d, stop: 0.1 #2b2b2b, stop: 0.5 #292929, stop: 0.9 #282828, stop: 1 #252525);
selection-background-color: #ffaa00;
}
QComboBox:!on
{
color: white;
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666, stop: 0.1 #555, stop: 0.5 #555, stop: 0.9 #444, stop: 1 #333);
}
QComboBox QAbstractItemView
{
border: 2px solid darkgray;
color: black;
selection-background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #111, stop: 1 #333);
}
QComboBox::drop-down
{
subcontrol-origin: padding;
subcontrol-position: top right;
width: 15px;
color: white;
border-left-width: 0px;
border-left-color: darkgray;
border-left-style: solid; /* just a single line */
border-top-right-radius: 3px; /* same radius as the QComboBox */
border-bottom-right-radius: 3px;
padding-left: 10px;
}
QComboBox::down-arrow, QSpinBox::down-arrow, QTimeEdit::down-arrow, QDateEdit::down-arrow
{
image: url(:/icons/down_arrow.png);
width: 7px;
height: 5px;
}
我试图覆盖项目委托:
ui->modeComboBox->setItemDelegate(new QStyledItemDelegate());
以及
QComboBox QAbstractItemView::item:selected style
或覆盖视图:
QListView * listView = new QListView(ui->modeComboBox);
listView->setStyleSheet("QListView::item { \
border-bottom: 5px solid white; margin:3px; } \
QListView::item:selected { \
border-bottom: 5px solid black; margin:3px; \
color: black; \
}");
ui->modeComboBox->setView(listView);
但在这两种情况下,这完全禁用了所选项目(第 17 项)的突出显示
更新 1
我测试了设置 ::item:checked 样式表,但没有帮助:
QListView * listView = new QListView(ui->modeComboBox);
listView->setStyleSheet("QListView::item { \
border-bottom: 5px solid white; margin:3px; } \
QListView::item:selected { \
border-bottom: 5px solid black; margin:3px; \
color: black; } \
QListView::item:checked { \
background-color: green; \
color: green;}"
);
ui->modeComboBox->setView(listView);
我还把这个添加到样式表中以确保:
QComboBox QListView::item:checked {
background-color: green;
}
选中 17 模式的结果是(黑色只是鼠标悬停):
更新 2
好的,我可以更改选中项目的字体粗细,但我无法从项目中删除勾号。我试验了我的样式表文件,发现这两个选择器负责突出显示选中项目的样式:
QWidget:item:selected
{
border: 0px solid #999900;
background: transparent;
}
QWidget:item:checked
{
font-weight: bold;
}
如果我删除 ::item:selected,则 ::item:checked 不起作用(它不会使选中的项目变为粗体)并且勾号消失。
在 Qt 论坛上,他们建议我以某种方式缩短 "space for icons of combobox"。我找不到负责的选择器。
好吧,经过大量的努力,我做了一些解决方法..它不是最好的,它不合适,但看起来还不错..
我以这种方式添加了粗体效果(它会影响其他小部件,例如可检查的菜单项,但我可以接受):
QWidget:item:selected
{
border: 0px solid #999900;
background: transparent;
}
QWidget:item:checked
{
font-weight: bold;
}
然后,当我添加项目时,我会在它们的文本中添加空格,以便将其向右移动。我尝试了很多方法,但没有任何影响内部的 QAbstractItemView。
这是结果:
这对我有用!:
myComboBox->setStyleSheet("QListView{color:black; background-color:white;}");
我在不太具体的样式表选择器和 "padding-left":
方面取得了成功
QComboBox:item {
padding-left: 20px; /* move text right to make room for tick mark */
}
QComboBox:item:selected {
padding-left: 20px; /* move text right to make room for tick mark */
border: 2px solid black;
}
QComboBox:item:checked {
padding-left: 20px; /* move text right to make room for tick mark */
font-weight: bold;
}
(可能也有一些不必要的重复!)
我知道现在已经很晚了,但是对于遇到同样问题的人:
我在这里的另一个问题上发现了这个:Not able to hide Choice-Indicator of the QComboBox
这应该隐藏 indicator/tick:
QComboBox::indicator{
background-color:transparent;
selection-background-color:transparent;
color:transparent;
selection-color:transparent;
}
@Miklemyers 的回答删除了 indicator/tick,但我发现 space 仍然存在。要删除 space,我发现我还必须使用
QComboBox::item:selected {
border: none;
}
我想在组合框的下拉菜单中设置突出显示所选项目的样式。
与其他问题的不同之处在于,我不想为 "selected" 项设置样式(悬停在上方),而是要为已经选择的项设置样式。
默认是在文本上绘制的某种勾号。我希望所选项目具有粗体文本且没有勾号。
或者在最坏的情况下,将文本向右移动,使勾号正确可见。
我有的是这个:
注意第 17 个项目,它在数字 17 上打了勾。
这是我的样式表:
QComboBox
{
subcontrol-origin: padding;
subcontrol-position: top right;
selection-background-color: #111;
selection-color: yellow;
color: white;
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646);
border-style: solid;
border: 1px solid #1e1e1e;
border-radius: 5;
padding: 1px 0px 1px 20px;
}
QComboBox:hover, QPushButton:hover
{
border: 1px solid yellow;
color: white;
}
QComboBox:editable {
background: red;
color: pink;
}
QComboBox:on
{
padding-top: 0px;
padding-left: 0px;
color: white;
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d2d2d, stop: 0.1 #2b2b2b, stop: 0.5 #292929, stop: 0.9 #282828, stop: 1 #252525);
selection-background-color: #ffaa00;
}
QComboBox:!on
{
color: white;
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666, stop: 0.1 #555, stop: 0.5 #555, stop: 0.9 #444, stop: 1 #333);
}
QComboBox QAbstractItemView
{
border: 2px solid darkgray;
color: black;
selection-background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #111, stop: 1 #333);
}
QComboBox::drop-down
{
subcontrol-origin: padding;
subcontrol-position: top right;
width: 15px;
color: white;
border-left-width: 0px;
border-left-color: darkgray;
border-left-style: solid; /* just a single line */
border-top-right-radius: 3px; /* same radius as the QComboBox */
border-bottom-right-radius: 3px;
padding-left: 10px;
}
QComboBox::down-arrow, QSpinBox::down-arrow, QTimeEdit::down-arrow, QDateEdit::down-arrow
{
image: url(:/icons/down_arrow.png);
width: 7px;
height: 5px;
}
我试图覆盖项目委托:
ui->modeComboBox->setItemDelegate(new QStyledItemDelegate());
以及
QComboBox QAbstractItemView::item:selected style
或覆盖视图:
QListView * listView = new QListView(ui->modeComboBox);
listView->setStyleSheet("QListView::item { \
border-bottom: 5px solid white; margin:3px; } \
QListView::item:selected { \
border-bottom: 5px solid black; margin:3px; \
color: black; \
}");
ui->modeComboBox->setView(listView);
但在这两种情况下,这完全禁用了所选项目(第 17 项)的突出显示
更新 1
我测试了设置 ::item:checked 样式表,但没有帮助:
QListView * listView = new QListView(ui->modeComboBox);
listView->setStyleSheet("QListView::item { \
border-bottom: 5px solid white; margin:3px; } \
QListView::item:selected { \
border-bottom: 5px solid black; margin:3px; \
color: black; } \
QListView::item:checked { \
background-color: green; \
color: green;}"
);
ui->modeComboBox->setView(listView);
我还把这个添加到样式表中以确保:
QComboBox QListView::item:checked {
background-color: green;
}
选中 17 模式的结果是(黑色只是鼠标悬停):
更新 2
好的,我可以更改选中项目的字体粗细,但我无法从项目中删除勾号。我试验了我的样式表文件,发现这两个选择器负责突出显示选中项目的样式:
QWidget:item:selected
{
border: 0px solid #999900;
background: transparent;
}
QWidget:item:checked
{
font-weight: bold;
}
如果我删除 ::item:selected,则 ::item:checked 不起作用(它不会使选中的项目变为粗体)并且勾号消失。
在 Qt 论坛上,他们建议我以某种方式缩短 "space for icons of combobox"。我找不到负责的选择器。
好吧,经过大量的努力,我做了一些解决方法..它不是最好的,它不合适,但看起来还不错..
我以这种方式添加了粗体效果(它会影响其他小部件,例如可检查的菜单项,但我可以接受):
QWidget:item:selected
{
border: 0px solid #999900;
background: transparent;
}
QWidget:item:checked
{
font-weight: bold;
}
然后,当我添加项目时,我会在它们的文本中添加空格,以便将其向右移动。我尝试了很多方法,但没有任何影响内部的 QAbstractItemView。
这是结果:
这对我有用!:
myComboBox->setStyleSheet("QListView{color:black; background-color:white;}");
我在不太具体的样式表选择器和 "padding-left":
方面取得了成功QComboBox:item {
padding-left: 20px; /* move text right to make room for tick mark */
}
QComboBox:item:selected {
padding-left: 20px; /* move text right to make room for tick mark */
border: 2px solid black;
}
QComboBox:item:checked {
padding-left: 20px; /* move text right to make room for tick mark */
font-weight: bold;
}
(可能也有一些不必要的重复!)
我知道现在已经很晚了,但是对于遇到同样问题的人: 我在这里的另一个问题上发现了这个:Not able to hide Choice-Indicator of the QComboBox
这应该隐藏 indicator/tick:
QComboBox::indicator{
background-color:transparent;
selection-background-color:transparent;
color:transparent;
selection-color:transparent;
}
@Miklemyers 的回答删除了 indicator/tick,但我发现 space 仍然存在。要删除 space,我发现我还必须使用
QComboBox::item:selected {
border: none;
}