Цвет текста QComboBox не изменится с помощью таблицы стилей

#qt #qt5 #qtstylesheets

#qt #qt5 #таблицы qtstylesheets

Вопрос:

Я пытаюсь создать выпадающий список в QT5. Я использую QT Creator для макета и загружаю таблицу стилей для всего приложения при запуске.

CSS, который я связал с моим выпадающим списком, выглядит следующим образом:

 QComboBox
{
    color:white;
    background-color: qlineargradient(x1:0, y1:0, x2:1,y2:1, stop: 1 rgba(228, 41, 81, 100), stop: 0 rgba(234, 107, 101, 100));
    border-color: rgba(255,255,255,200);
    border-width: 1px;
    border-style: solid;
}

QComboBox QListView
{
    border-style: none;
    background-color: qlineargradient(x1:0, y1:0, x2:1,y2:0, stop: 1 rgba(228, 41, 81, 100), stop: 0 rgba(234, 107, 101, 100));
}

QComboBox::drop-down
{
    width: 20px;
    border: 1px;
    border-color:white;
    border-left-style:solid;
    border-top-style: none;
    border-bottom-style: none;
    border-right-style: none;
}

QComboBox::down-arrow
{
    image: url(:/ArrowImages/images/whitearrowdown16.png);
    width: 16px;
    height: 16px;
}
 

Но цвет текста в поле со списком остается стандартным (черным) цветом. Цвет в выпадающем списке — белый. Цвет рамки и стиль — все работает правильно. Является ли метка в выпадающем списке каким-то вспомогательным элементом управления, который мне нужно стилизовать отдельно? Или я упускаю что-то еще?

Спасибо.

Редактировать:

Добавлены скриншоты для наглядности

Стиль Combobox

Выпадающий стиль

Редактирование 2: Похоже, это происходит только тогда, когда для выпадающего списка установлено значение недоступно для редактирования (что является правильным поведением для моей программы, поэтому мне это не очень помогает). Когда для выпадающего списка установлено значение редактируемый, он правильно выполняет стили. Я пытался добавить

 QCombobox:!editable
{
    color:white;
}
 

но это не решает проблему.

Комментарии:

1. Если вы загружаете таблицы стилей из файла, возможно, у вас есть другая таблица стилей, загруженная впоследствии в вашем приложении, которая перезаписывает этот конкретный стиль? Вы могли бы попробовать использовать QComboBox#YOUR_SPECIFIC_COMBO_BOX_NAME { color: white; }

Ответ №1:

Только что решил эту проблему. Кажется, что установка свойства заполнения (с любым значением) в поле со списком в таблице стилей позволяет ему правильно соблюдать цветовой стиль. Я предполагаю, что это связано с какой-то ошибкой, которая может возникнуть только при определенных настройках, но если у кого-то еще есть такая же проблема, следующий код будет работать (по сравнению с исходным вопросом):

 QComboBox
{
    color:white;
    background-color: qlineargradient(x1:0, y1:0, x2:1,y2:1, stop: 1 rgba(228, 41, 81, 100), stop: 0 rgba(234, 107, 101, 100));
    border-color: rgba(255,255,255,200);
    border-width: 1px;
    border-style: solid;
    padding: 1px 0px 1px 3px; /*This makes text colour work*/
}
 

Комментарии:

1. Эта проблема не давала мне покоя последние два часа… ЗАПОЛНЕНИЕ? Вау, я благодарю вас за решение этой проблемы! Но мне интересно, почему? Какая ошибка могла бы вызвать это?

2. Удивительные. отличная работа, чтобы разобраться с этим. У меня была та же проблема.

3. Я знаю, что SO препятствует бессмысленным комментариям, но… Спасибо! margin: 0px также, похоже, работает.

Ответ №2:

Представление «внутри» — это QListView.

 QListView
{
  color: white;
}
 

должно сработать.

Комментарии:

1. Извините, это сам фактический combobox, а не выпадающий список, который не принимает изменение цвета. Выпадающий список стилизуется правильно (хотя используется цвет из раздела QComboBox, а не его собственный. Однако в моем случае это не проблема.)

2. Вы имеете в виду текущий элемент? Для текущего элемента ваш код (первая часть) в полном порядке ( QComboBox{ color: white; } ) . Вы пытались удалить весь код таблицы стилей, кроме тега color?

3. Я добавил несколько скриншотов к исходному вопросу для ясности. Я попытался создать полностью пустую таблицу стилей, используя только таблицу стилей со списком с цветом, и это по-прежнему влияет только на выпадающий список.

Ответ №3:

Использование заполнения в качестве обходного пути может привести к некоторым другим проблемам. Возможно, установка selection-color должна решить эту проблему.

 QComboBox
{
   selection-color: white;
}