c++ - Qt QMessageBox显示没有颜色的按钮
问题描述
我创建了一个带有自定义按钮的 QMessageBox,它们显示为灰色,如下图所示:
在Linux上运行很好!但是在树莓上它给我带来了麻烦。我写的代码片段如下:
#include "alertmessage.h"
#include <QDebug>
#include <QAbstractButton>
#include <QCoreApplication>
AlertMessage::AlertMessage(QMessageBox *parent): QMessageBox(parent)
{
this->setFont(QFont("Roboto"));
QFont font = this->font();
font.setPointSize(26);
this->setMaximumHeight(250);
this->setModal(true);
this->setMaximumWidth(this->minimumHeight());
this->setWindowTitle(QString("Falha de conexão"));
this->setChecker(new QCheckBox("Não mostrar essa menssagem novamente.", this));
this->setText(QString("<p style='margin-bottom: 0cm; line-height: 100%; text-align: justify;'>"
"Houve uma falha de comunicação com um ou mais sensores, isso poderá "
"afetar o desempenho do sistema.</p>"));
this->setInformativeText(QString("<p style='margin-bottom: 0cm; line-height: 100%; text-align:justify;'><strong>Você"
" quer continuar ou <span style='color: #ff0000;'>PARAR</span> a aplicação?</strong></p>"));
this->setStandardButtons(QMessageBox::No | QMessageBox::Yes);
this->setButtonText(QMessageBox::No, QString("Parar").toUpper());
this->setButtonText(QMessageBox::Yes, QString("Continuar"));
QPalette okPalette = this->button(QMessageBox::Yes)->palette();
QPalette noPalette = this->button(QMessageBox::No)->palette();
okPalette.setColor(QPalette::Button, QColor(13, 71, 161));
okPalette.setColor(QPalette::ButtonText, QColor(Qt::white));
noPalette.setColor(QPalette::Button, QColor(127, 0, 0));
noPalette.setColor(QPalette::ButtonText, QColor(Qt::white));
this->button(QMessageBox::Yes)->setPalette(okPalette);
this->button(QMessageBox::No)->setPalette(noPalette);
this->setIcon(QMessageBox::Warning);
this->setCheckBox(this->getChecker());
this->connect(this->button(QMessageBox::Yes), SIGNAL(clicked()), this, SLOT(turnVisible()));
this->connect(this->button(QMessageBox::No), SIGNAL(clicked()), this, SLOT(turnOFF()));
}
解决方案
我在 Linux 和 Windows 中尝试过,如果你使用QPalette
它们,它们都会使用你的操作系统和系统样式,因为如果你想拥有自己的风格,最好使用StyleSheet。
我在您的代码中看到的另一件事是,如果您将代码放在构造函数中,则不需要使用this
.
我更改了一些代码,结果是这样的:
setFont(QFont("Roboto"));
setAutoFillBackground(true);
QFont font = this->font();
font.setPointSize(26);
setMaximumHeight(250);
setModal(true);
setMaximumWidth(minimumHeight());
setWindowTitle(QString("Falha de conexão"));
setChecker(new QCheckBox("Não mostrar essa menssagem novamente.", this));
setText(QString("<p style='margin-bottom: 0cm; line-height: 100%; text-align: justify;'>"
"Houve uma falha de comunicação com um ou mais sensores, isso poderá "
"afetar o desempenho do sistema.</p>"));
this->setInformativeText(QString("<p style='margin-bottom: 0cm; line-height: 100%; text-align:justify;'><strong>Você"
" quer continuar ou <span style='color: #ff0000;'>PARAR</span> a aplicação?</strong></p>"));
setStandardButtons(QMessageBox::No | QMessageBox::Yes);
setButtonText(QMessageBox::No, QString("Parar").toUpper());
setButtonText(QMessageBox::Yes, QString("Continuar"));
button(QMessageBox::Yes)->setStyleSheet(QString::fromUtf8("background-color: rgb(13, 71, 161);color:white;"));
button(QMessageBox::No)->setStyleSheet(QString::fromUtf8("background-color: rgb(127, 0, 0);color:white;"));
setIcon(QMessageBox::Warning);
setCheckBox(getChecker());
connect(this->button(QMessageBox::Yes), SIGNAL(clicked()), this, SLOT(turnVisible()));
connect(this->button(QMessageBox::No), SIGNAL(clicked()), this, SLOT(turnOFF()));
推荐阅读
- javascript - 如何从 WebView 获取 div 的属性
- django - / Module“cart.context”处的 ImportError 未定义“cart_context”属性/类
- r - R:Ggplot2错误:美学必须是长度1或与数据相同(72):填充
- timer - 调用 'onReceive(_:perform:)' 的结果未使用
- typescript - 如何解决错误:错误:0909006C:PEM 例程:get_name:没有起始行?
- php - 如何安装特定版本的 Symfony?
- sql - 项目状态表推导SQL逻辑
- laravel - Laravel 中的 DRY 编码 7+
- eclipse - Eclipse 中的某些文件显示为灰色/没有语法着色/无法识别函数
- php - 更新 laravel 版本后出现 Api“401 - 未验证”错误