Стиль QComboBox для выбранного элемента в раскрывающемся списке
Я хочу, чтобы стиль выделения выбранного элемента в раскрывающемся списке combobox.
разница с другими вопросами заключается в том, что я не хочу стилизовать "выбранный" элемент(завис с помощью мыши) .. но Я заинтересован в стилизации уже выбранного элемента.
по умолчанию используется своего рода тикер, который закрашивается поверх текста. Я хочу, чтобы выбранный элемент имел жирный текст и не имел изображения тикера.
или в худшем случае просто shifth текст справа, чтобы сделать тикер видимым должным образом.
вот что у меня есть:
обратите внимание на 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;
}
Я пытался переопределить элемент delagate:
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 stylesheet, но это не помогло:
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
Ok я смог изменить вес шрифта проверенного элемента, но я не могу удалить глупый тикер из пункта.. Я экспериментировал с моим файлом таблицы стилей, и я узнал, что эти два селектора отвечают за стиль подсветки проверенных элементов:
QWidget:item:selected
{
border: 0px solid #999900;
background: transparent;
}
QWidget:item:checked
{
font-weight: bold;
}
если я удалить : пункт:выбрано ::деталь:проверил, не работают (не bolderise отмеченный элемент) и линеечку пропадает.
на форуме Qt они посоветовали мне как-то сократить "пространство для значков combobox".. Я не могу найти селектор, который отвечает за что..
у меня такое чувство, что таблица стилей-черная магия, и только выбранные могут понять, что происходит внутри..
4 ответов
Ok после большой борьбы я сделал некоторые обходные пути.. это не лучшее, это не правильно, но выглядит нормально..
Я добавил жирный эффект таким образом (это влияет на другие виджеты, такие как проверяемые пункты меню, но я могу жить с этим):
QWidget:item:selected
{
border: 0px solid #999900;
background: transparent;
}
QWidget:item:checked
{
font-weight: bold;
}
затем, когда я добавляю элементы, я добавляю пробелы в их текст, чтобы переместить его вправо.. Я пробовал так много вещей, но ничто не повлияло на QAbstractItemView внутри.
Это результат:
У меня был успех с менее конкретными селекторами таблиц стилей и "заполнением слева":
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;
}
(возможно, какое-то ненужное дублирование в этом тоже!)
Я знаю, что это действительно поздно, но для людей, имеющих ту же проблему: Я нашел это в другом вопросе здесь:не удается скрыть выбор-индикатор QComboBox
Это должно скрыть индикатор/ТИК:
QComboBox::indicator{
background-color:transparent;
selection-background-color:transparent;
color:transparent;
selection-color:transparent;
}
это работает для меня!:
myComboBox->setStyleSheet("QListView{color:black; background-color:white;}");