仅在 parent 上更改 QGroupBox 的标题颜色
Change title color of QGroupBox only on parent
我有 2 个 QGroupBox,其中一个是另一个的 child。我想更改 parent 标题的颜色而不更改 child 的颜色。我根据 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
mainwindow.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 来做同样的事情,它就可以工作。帮我弄清楚我做错了什么?
QSS 与 CSS 略有不同。 Qt 只是不知道你的情况下 r1
是什么。要达到您想要的效果,您可以:
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();
- 使用
>
选择器匹配父子关系。在这种情况下,QMainWindow
的直接子代的所有 QGroupBox
都将为红色。
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();
- 使用
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
我有 2 个 QGroupBox,其中一个是另一个的 child。我想更改 parent 标题的颜色而不更改 child 的颜色。我根据 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
mainwindow.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 来做同样的事情,它就可以工作。帮我弄清楚我做错了什么?
QSS 与 CSS 略有不同。 Qt 只是不知道你的情况下 r1
是什么。要达到您想要的效果,您可以:
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();
- 使用
>
选择器匹配父子关系。在这种情况下,QMainWindow
的直接子代的所有QGroupBox
都将为红色。
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();
- 使用
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