首页 > 解决方案 > 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&ccedil;&atilde;o com um ou mais sensores, isso poder&aacute; "
"afetar o desempenho do sistema.</p>"));
    this->setInformativeText(QString("<p style='margin-bottom: 0cm; line-height: 100%; text-align:justify;'><strong>Voc&ecirc;"
" quer continuar ou <span style='color: #ff0000;'>PARAR</span> a aplica&ccedil;&atilde;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()));


}

标签: c++qtraspberry-piraspberry-pi4qmessagebox

解决方案


我在 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&ccedil;&atilde;o com um ou mais sensores, isso poder&aacute; "
"afetar o desempenho do sistema.</p>"));
    this->setInformativeText(QString("<p style='margin-bottom: 0cm; line-height: 100%; text-align:justify;'><strong>Voc&ecirc;"
" quer continuar ou <span style='color: #ff0000;'>PARAR</span> a aplica&ccedil;&atilde;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()));

在此处输入图像描述


推荐阅读