Я хочу почистить свой вспомогательный виджет с помощью 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.
Заранее спасибо.
Я не знаю что это за виджет ui.colorBarWidget
, но, похоже, это не виджет входа, как QLineEdit
или же QComboBox
,
Итак, вы должны использовать QPalette::Window
роль вместо QPalette::Base
,
В документации Qt есть следующее описание QPalette::Base role
:
Используется в основном как цвет фона для виджетов ввода текста, но может
также может быть использован для другой живописи — например, на фоне комбобокса
выпадающие списки и ручки панели инструментов. Это обычно белый или другой
светлый цвет.
Я нашел решение. Если вы используете после настройки палитры:
ui.colorBarWidget->setAutoFillBackground(true);
Это свойство по умолчанию false. Таким образом, вы должны включить его, тогда все в порядке. Но также вы должны рассмотреть размер, фиксированный размер лучше для этого.