我有一个这样的测试样本:
在class B
中,只有QVector
来存储一些QLabel
,如下所示:
class B : public QWidget
{
public:
B(QWidget *parent = 0);
QVector<QLabel*> mLbls;
};
在class A
中,我有以下代码:
A::A(QWidget *parent)
: QMainWindow(parent)
{
QWidget *mWidget = new QWidget(this);
QHBoxLayout *hLayout = new QHBoxLayout(mWidget);
B testingB;
testingB.mLbls.resize(5);
for(int i = 0; i < 5; i++) {
testingB.mLbls[i] = new QLabel(mWidget);
testingB.mLbls[i]->setText(QString::number(i));
hLayout->addWidget(testingB.mLbls[i]);
}
setStyleSheet("QLabel {background-color: red;}"); //I want to set the QLabel bg color to red
mWidget->setLayout(hLayout);
setCentralWidget(mWidget);
}
所以我要做的是将QLabel
中的所有Class B
设置为红色。但问题是,如果我使用setStyleSheet("QLabel {background-color: red;}");
,则所有QLabel
(甚至QLabel
中的Class A
)都将设置为红色背景颜色。
我不知道如何仅为CLass B
对象设置所有样式表。而且我知道我可以用这种方式来实现我想要做的事情:
for(int i = 0; i < 5; i++) {
testingB.mLbls[i] = new QLabel(mWidget);
testingB.mLbls[i]->setText(QString::number(i));
testingB.mLbls[i]->setStyleSheet("QLabel {background-color: red;}"); //new added
hLayout->addWidget(testingB.mLbls[i]);
}
通过使用这种方式,我认为单独为它们逐个设置样式表非常麻烦,除此之外我有时可能需要设置一些QLabel
样式表,其余部分只有相同的样式表。如果我有更多的对象并逐一设置它们,那可能会花费很多时间。
所以我假设有一种方法可以为class
中的某些对象设置一次样式表。希望我能清楚地解释我的问题。要解决这个问题,我能做些什么?
谢谢。
答案 0 :(得分:1)
Qt CSS语法允许您为CSS规则(Qt doc)选择子项,但它基于QObject的父项,而不是哪个类包含指向QLabel的指针。
此CSS仅适用于作为QLabel
对象的子项或子项的YourContainerClassWidget
个对象。
// C++
auto container = new YourContainerClassWidget;
auto label = QLabel(container); // The label is now a child of container
// CSS
YourContainerClassWidget QLabel { // Descendant selector
background-color: red;
}
// You can also apply only to direct children with this syntax
YourContainerClassWidget > QLabel { // Child selector
background-color: red;
}