QPalette не работает на sub QWidget

Я хочу почистить свой вспомогательный виджет с помощью QLinerGradient. Я создал пользовательский интерфейс с помощью QtDesigner.

введите описание изображения здесь

Но я не могу почистить этот виджет с помощью этого кода.(Ui.colorBarWidget - это обычный QWidget, созданный QtDesigner.)

   QPalette palette;
   QLinearGradient gradient(ui.colorBarWidget->rect().topLeft(),ui.colorBarWidget->rect().topRight());

   gradient.setColorAt(0,   Qt::blue);
   gradient.setColorAt(0.2, Qt::green);
   gradient.setColorAt(0.4, Qt::red);
   gradient.setColorAt(0.6, Qt::yellow);
   gradient.setColorAt(1,   Qt::cyan);
   palette.setBrush(QPalette::Base, gradient);

   ui.colorBarWidget->setPalette(palette);

Кроме того, этот код работает в автономном приложении QWidget. Это его вывод:

введите описание изображения здесь

Но я не могу сделать то же самое в моем дизайне. Я могу сделать это с таблицей стилей

ui.colorBarWidget->setStyleSheet( "background-color: qlineargradient( x1:0 y1:0, x2:0 y2:1, stop:0 blue, stop:1 red )" ); /* works */

но почему я не могу сделать это с QPalette.

Заранее спасибо.

2 ответа

Решение

Я нашел решение. Если вы используете после настройки палитры:

ui.colorBarWidget->setAutoFillBackground(true);

Это свойство по умолчанию false. Таким образом, вы должны включить его, тогда все в порядке. Но также вы должны рассмотреть размер, фиксированный размер лучше для этого.

Я не знаю что это за виджет ui.colorBarWidget, но, похоже, это не виджет входа, как QLineEdit или же QComboBox,

Итак, вы должны использовать QPalette::Window роль вместо QPalette::Base,

В документации Qt есть следующее описание QPalette::Base role:

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

Другие вопросы по тегам