Я хочу изменить цвет фона и цвет кнопки ОК. Но если я меняю цвет фона, цвет кнопки автоматически меняется.
Мой код:
auto msgBox = new QMessageBox();
msgBox->setAttribute(Qt::WA_DeleteOnClose);
msgBox->setMinimumSize(300, 300);
msgBox->setWindowTitle("Error");
msgBox->setIcon(QMessageBox::NoIcon);
msgBox->setStyleSheet("QPushButton{ color: red; background-color: white }");
msgBox->setStyleSheet("background-color:green;");
Кнопка «ОК» (a QPushButton
) является дочерним элементом QMessageBox
, поэтому, когда вы устанавливаете ее таблицу стилей, а затем устанавливаете таблицу стилей QMessageBox
, таблица стилей кнопки переопределяется. Вероятно, потому что при конфликте устанавливается родительская таблица стилей. Поэтому вам нужно избегать этого конфликта, чтобы добиться нужного вам вида.
auto msgBox = new QMessageBox();
msgBox->setMinimumSize(300, 300);
msgBox->setStyleSheet("QMessageBox{ background-color: green;}"
"QPushButton{ background-color: white; color: red;}");
Вот результат:
Вам нужно указать зеленый цвет фона для QMessageBox
, если вы этого не сделаете (то, как вы это делаете), он переопределит все остальные таблицы стилей, которые вы применяете к любому из его дочерних элементов, даже если они применяются после.
Для демонстрации это тоже не сработает:
msgBox->setStyleSheet("background-color:green;");
msgBox->styleSheet().append("QPushButton{ color: red; background-color: white }");
Это также приведет к зеленому фону кнопки.
Вы можете настроить свою таблицу стилей msgBox
так, как вы это делаете, а для кнопки вы можете изменить ее таблицу стилей напрямую следующим образом:
msgBox->setStyleSheet( "background-color: green;" );
msgBox->button(QMessageBox::Ok)->setStyleSheet( "background-color: white; color: red;" );
Это эквивалентно указанию имен объектов в таблице стилей, но вам не нужно беспокоиться об этом здесь, потому что конфликт стилей возникает между двумя разными объектами, QMessageBox
и QPushButton
.