Qt StyleSheet 以编程方式创建 QWidget
Qt StyleSheet to programmatically createdQWidget
我想将样式表应用于我在父 QWidget
的构造函数中创建的特定 Qwidget
。我不想在设计器中创建 QWidget
,但我想动态创建它。
这是我的代码
enum {one = 0,
two = 1,
three = 2};
cMainForm::cMainForm(QWidget *parent) : QWidget(parent), ui(new Ui::cMainForm) {
//...
QWidget* widgetTest[3];
widgetTest[one] = new QWidget(this);
widgetTest[one]->setGeometry(100,100,100,100);
widgetTest[one]->show();
widgetTest[one]->raise();
//...
setStyleSheet("QWidget#widgetTest[one]{"
"background-color: red;"
"}"
);
//...
}
而且不起作用。
如果我更改样式表:
setStyleSheet("QWidget{"
"background-color: red;"
"}"
);
样式表应用于所有小部件。但我不想要这个;我只想将样式表应用到那个特定的小部件。
此外,如果我不使用数组,它也不起作用。
QWidget* widgetTest;
widgetTest = new QWidget(this);
widgetTest->setGeometry(100,100,100,100);
widgetTest->show();
widgetTest->raise();
//...
setStyleSheet("QWidget#widgetTest{"
"background-color: red;"
"}"
);
我已经搜索了documentation。
有什么解决办法?
您正在使用的选择器 (#
) 指的是小部件 objectName
属性,而不是变量名称(样式引擎对您的变量一无所知)。为小部件指定一个对象名称:
widgetTest->setObjectName("widgetTest");
然后设置样式表:
widgetTest->setStyleSheet("QWidget#widgetTest { background-color: red }");
我想将样式表应用于我在父 QWidget
的构造函数中创建的特定 Qwidget
。我不想在设计器中创建 QWidget
,但我想动态创建它。
这是我的代码
enum {one = 0,
two = 1,
three = 2};
cMainForm::cMainForm(QWidget *parent) : QWidget(parent), ui(new Ui::cMainForm) {
//...
QWidget* widgetTest[3];
widgetTest[one] = new QWidget(this);
widgetTest[one]->setGeometry(100,100,100,100);
widgetTest[one]->show();
widgetTest[one]->raise();
//...
setStyleSheet("QWidget#widgetTest[one]{"
"background-color: red;"
"}"
);
//...
}
而且不起作用。
如果我更改样式表:
setStyleSheet("QWidget{"
"background-color: red;"
"}"
);
样式表应用于所有小部件。但我不想要这个;我只想将样式表应用到那个特定的小部件。
此外,如果我不使用数组,它也不起作用。
QWidget* widgetTest;
widgetTest = new QWidget(this);
widgetTest->setGeometry(100,100,100,100);
widgetTest->show();
widgetTest->raise();
//...
setStyleSheet("QWidget#widgetTest{"
"background-color: red;"
"}"
);
我已经搜索了documentation。
有什么解决办法?
您正在使用的选择器 (#
) 指的是小部件 objectName
属性,而不是变量名称(样式引擎对您的变量一无所知)。为小部件指定一个对象名称:
widgetTest->setObjectName("widgetTest");
然后设置样式表:
widgetTest->setStyleSheet("QWidget#widgetTest { background-color: red }");