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, но, похоже, это не виджет входа, как QLineEdit или же QComboBox,

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

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

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

0

Другие решения

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

ui.colorBarWidget->setAutoFillBackground(true);

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

0

По вопросам рекламы [email protected]