web-dev-qa-db-ja.com

Qt5-背景色をQPushButtonおよびQCheckBoxに設定

Qt5でQAbstractButton(QPushButtonまたはQCheckBoxのいずれか)の背景色を変更しようとしていて、運がありません。

これは何もしません:

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の背景色を変更する方法 」というタイトルのページがありますが、この2つの方法について説明しているだけです。

Qt Style Sheets Examples 」というページもあります。これは、背景色を変更したい場合は、ボタンの描画のあらゆる側面を引き継ぐ必要があることを意味します。

これをMac、Windows、Ubuntu Linuxで実行する必要があり、ボタンに関するすべてを手動で3回(各プラットフォームで1回)描画する必要がある場合、それは本当に幸せなことではありません。

明らかな何かが欠けていますか?

追伸「背景色」とは、ボタンの表面のテキストの下の色ではなく、ボタンを囲む領域を意味します。

14
Betty Crokker

私は同じ問題を抱えていましたが、ようやくこれが機能するようになりました。 FusionカラーテーマでQt 5を使用しています:

QPalette pal = button->palette();
pal.setColor(QPalette::Button, QColor(Qt::blue));
button->setAutoFillBackground(true);
button->setPalette(pal);
button->update();

これらのコマンドを上記の正確な順序で試してみてください。それでもうまくいかない場合は、テーマをFusionに設定して、もう一度試してください。

幸運を!

12
Alchete

ダイアログの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)
}

enter image description here

8
kato2

スタイルシートにborder:noneを追加します。プロパティ。何らかの理由で、これによりデフォルトの背景色も削除されます。例:background-color: rgba(46, 204, 113, 0.4); border: none;

7
Attaque

これを試して:

_QColor col = QColor(Qt::blue);
if(col.isValid()) {
   QString qss = QString("background-color: %1").arg(col.name());
   button->setStyleSheet(qss);
}
_

@ goetzによるQTフォーラム で述べたように。

私は_Qcolor col_のいくつかの異なる定義をQColor col = QColor::fromRgb(144,238,144);として使用しましたが、これはうまくいきます。

4
abaghiyan

馬鹿げた方法を見つけて、パレットのすべての属性を試しましたが、「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();

参照リンク: スタイルシートのプロパティを取得する方法?

0
whisper