0

我有 2 个 QGroupBoxes,其中一个是另一个的孩子。我想改变父母标题的颜色而不改变孩子的颜色。我根据 qt 文档尝试了以下操作: https
://doc.qt.io/qt-5/stylesheet-examples.html 我的代码:
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGroupBox>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


private:
    Ui::MainWindow *ui;
    QGroupBox *r1;
    QGroupBox *r2;
};
#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    r1 = new QGroupBox("test",this);
    r1->setGeometry(10,10,100,100);
    r1->setStyleSheet("QGroupBox::title#r1{color:red}");
    r1->show();
    r2 = new QGroupBox("test",r1);
    r2->setGeometry(10,10,80,80);
    r2->show();
}

MainWindow::~MainWindow()
{
    delete ui;
}

它对我不起作用。标题不会改变颜色。
如果我只是通过在设计器中创建 QGroupBox 来做同样的事情,它就可以工作。帮我弄清楚我做错了什么?

4

1 回答 1

1

QSS 与 CSS 略有不同。Qt 只是不知道r1你的情况。为了达到您想要的效果,您可以:

  1. setObjectName()在您要自定义的对象上,然后通过此名称引用。因此,只有一个元素将具有不同的颜色。
r1 = new QGroupBox("test",this);
r1->setGeometry(10,10,100,100);
r1->setObjectName("r1");
r1->setStyleSheet("QGroupBox#r1 {color: red}");
r1->show();
r2 = new QGroupBox("test",r1);
r2->setGeometry(10,10,80,80);
r2->show();
  1. 使用>选择器匹配父子关系。在这种情况下,所有QGroupBox的直接孩子都QMainWindow将是红色的。
r1 = new QGroupBox("test",this);
r1->setGeometry(10,10,100,100);
r1->setStyleSheet("QMainWindow > QGroupBox {color: red}");
r1->show();
r2 = new QGroupBox("test",r1);
r2->setGeometry(10,10,80,80);
r2->show();
  1. 使用title属性值 - 但是,我强烈不推荐这种方法。
r1 = new QGroupBox("test",this);
r1->setGeometry(10,10,100,100);
r1->setStyleSheet("QGroupBox[title='test'] {color: red}");
r1->show();
r2 = new QGroupBox("test",r1);
r2->setGeometry(10,10,80,80);
r2->show();

更多关于语法的信息可以在这里找到:https ://doc.qt.io/Qt-5/stylesheet-syntax.html

于 2020-07-20T07:42:35.377 回答