मैंने अनुकूलित बटनों के साथ एक QMessageBox बनाया है और वे नीचे दिए गए चित्र के रूप में धूसर रंग में दिखाई दे रहे हैं: < img alt="ग्रे में बटन" src="https://i.stack.imgur.com/GeMwu.png"/>

लिनक्स पर चलना ठीक है! लेकिन रास्पबेरी पर यह मुझे परेशानी में डालता है। मैंने जो कोड लिखा है उसका स्निपेट निम्नलिखित है:

#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()));


}
1
Iaggo Capitanio 11 सितंबर 2021, 00:55

2 जवाब

सबसे बढ़िया उत्तर

मैंने इसे हल किया, प्रत्येक ओएस में कुछ डिफ़ॉल्ट शैलियाँ होती हैं और क्यूटी उन्हें और अधिक "मूल" दिखने के लिए खोजेगा। इसे ध्यान में रखते हुए मुझे अपने आवेदन को रास्पबेरी मानक शैलियों से अलग शैली लेने के लिए मजबूर करने की आवश्यकता है। कोड का स्निप जिसने हल किया:

QApplication  app(argc, argv);
qDebug() << QStyleFactory::keys(); //See available styles
app.setStyle("Fusion");
0
Iaggo Capitanio 16 सितंबर 2021, 23:18

मैं इसे Linux और windows दोनों में आज़माता हूँ, यदि आप QPalette का उपयोग करते हैं तो वे आपके OS और सिस्टम शैलियों का उपयोग करते हैं, इस वजह से यदि आप अपनी शैली चाहते हैं तो 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()));

enter image description here

1
Parisa.H.R 11 सितंबर 2021, 03:10