Qt5 - установка цвета фона для QPushButton и QCheckBox
Я пытаюсь изменить цвет фона QAbstractButton (либо QPushButton, либо QCheckBox) в Qt5 и мне не повезло.
Это ничего не делает:
pButton->setAutoFillBackground(true);
QPalette palette = pButton->palette();
palette.setColor(QPalette::Window, QColor(Qt::blue));
pButton->setPalette(palette);
pButton->show();
и если я попытаюсь изменить таблицу стилей:
pButton->setStyleSheet("background-color: rgb(255,255,0);");
затем Qt вскидывает руки и тянет блуждающую пуговицу.
Есть страница под названием " Как изменить цвет фона QWidget", но она просто говорит об этих двух методах.
Также есть страница " Примеры таблиц стилей Qt", которая подразумевает, что если вы хотите изменить цвет фона, вы должны взять на себя все аспекты рисования кнопки, что просто кажется излишним.
Мне нужно, чтобы это работало на Mac, Windows и Ubuntu Linux, и это на самом деле не радует, если мне приходится вручную рисовать все о кнопке 3 раза (по одному для каждой платформы).
Я что-то упускаю из виду?
ps Под "фоновым цветом" я подразумеваю область, окружающую кнопку, а не цвет под текстом на лицевой стороне кнопки.
7 ответов
У меня была та же проблема, но, наконец, получил это на работу. Я использую Qt 5 с цветовой темой Fusion:
QPalette pal = button->palette();
pal.setColor(QPalette::Button, QColor(Qt::blue));
button->setAutoFillBackground(true);
button->setPalette(pal);
button->update();
Попробуйте эти команды в точном порядке, как указано выше, и если это все еще не работает, установите вашу тему на Fusion и попробуйте снова.
Удачи!
В таблице стилей добавить рамку: нет; имущество. По некоторым причинам это также удаляет цвет фона по умолчанию. Пример: background-color: rgba(46, 204, 113, 0.4); border: none;
Попробуй это:
QColor col = QColor(Qt::blue);
if(col.isValid()) {
QString qss = QString("background-color: %1").arg(col.name());
button->setStyleSheet(qss);
}
как упомянуто на форуме QT @goetz.
Я использовал какое-то другое определение Qcolor col
как QColor col = QColor::fromRgb(144,238,144);
и это работает для меня.
Изменение свойства Dialog styleSheet работает для меня, установите это свойство на:
QPushButton:pressed {
background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(60, 186, 162, 255), stop:1 rgba(98, 211, 162, 255))
}
QPushButton {
background-color: #3cbaa2; border: 1px solid black;
border-radius: 5px;
}
QPushButton:disabled {
background-color: rgb(170, 170, 127)
}
Я нашел глупый способ, попробовал каждый атрибут в палитре, и он работает для меня при изменении 'QPalette::Base'. Может быть, вы можете попробовать.
pButton->setAutoFillBackground(true);
QPalette palette = pButton->palette();
//palette.setColor(QPalette::Window, QColor(Qt.blue));
//palette.setColor(QPalette::Foreground, QColor(Qt.blue));
palette.setColor(QPalette::Base, QColor(Qt.blue));
//palette.setColor(QPalette::AlternateBase, QColor(Qt.blue));
//palette.setColor(QPalette::ToolTipBase, QColor(Qt.blue));
//palette.setColor(QPalette::ToolTipText, QColor(Qt.blue));
//palette.setColor(QPalette::Text, QColor(Qt.blue));
//palette.setColor(QPalette::Button, QColor(Qt.blue));
//palette.setColor(QPalette::ButtonText, QColor(Qt.blue));
//palette.setColor(QPalette::BrightText, QColor(Qt.blue));
pButton->setPalette(palette);
pButton->show();
Я боролся с той же проблемой. Вам нужно выбратьQPalette::Button
вместо того QPalette::Window
. В справочнике Qt говорится следующее: QPaletteButton - Общий цвет фона кнопки. Этот фон может отличаться от Window, поскольку некоторые стили требуют другого цвета фона для кнопок. Итак, я решил это так:
QPalette pal=this->palette(); \\"this" is my derived button class
pal.setColor(QPalette::Window, style.background);
QColor col=style.background; \\ my style wrapper, returns QColor
this->setAutoFillBackground(true);
this->setPalette(pal);
Я хочу включить/выключить цвет кнопки.
Это работает для меня...
QPalette pal = ui->pushButton->palette();
if (bIn)
pal.setColor(QPalette::Button, QColor(Qt::green));
else
pal.setColor(QPalette::Button, QColor(Qt::red));
ui->pushButton->setPalette(pal);
ui->pushButton->setAutoFillBackground(true);
ui->pushButton->repaint();
Я переворачиваю значение bIn на сигнале/слоте с щелчком.
void BtnFrame::on_pushButton_clicked()
{
if (bIn)
bIn=false;
else
bIn=true;
setColor();
}