我在Windows 10 Pro上使用4.13.1和QT5.15.1。
我对在Qt中使用样式表很陌生,对考虑QSplitter及其子元素的可能选择器有些困惑。我希望有两个孩子分开一个分把手,并画他们的背景在不同的颜色。
这是一个示例szenario。
QSplitter* splitter = new QSplitter();
QWidget* widgetA = new QWidget();
// add a layout with some further child widgets
QWidget* widgetB = new QWidget();
// add a layout with some further child widgets
splitter->addWidget(widgetA);
splitter->addWidget(widgetB);
layout()->addWidget(splitter);我试过的地方:
widgetA->setStyleSheet("background-color: #ff0000;");适用于widgetA的所有子部件(例如,QLabels、QPushButtons、.),但不适用于它们周围的QLabels、widgetB、句柄和widgetA以下的所有小部件,以及对all.splitter->setStyleSheet("QSplitter QWidget #Andy {background-color: #ff0000;}");没有影响的widgetBwidgetA->setObjectName("Tim");和splitter->setStyleSheet("QWidget#Tim {background-color: #ff0000;}");,它只将背景应用于两个子小部件中的某个小部件。但是使用splitter->setStyleSheet("QSplitter #Tim {background-color: #ff0000;}"); (同样)没有任何效果。我将如何分别设置background-color widgetA widgetA widgetB**?** of ,从而在不影响儿童的widgetA或其他拆分子widgetB**?**的情况下
发布于 2020-12-14 15:11:52
我不认为在您的情况下使用widget->setStyleSheet()有任何问题。在这里,我已经测试了setObjectName()的实现
Application::Application(QWidget *parent) :
QWidget(parent)
{
//set a base layout for the parent of splitter
QHBoxLayout *boxLayout = new QHBoxLayout(this);
this->setLayout(boxLayout);
//allocate splitter with parent
QSplitter* splitter = new QSplitter(this);
QWidget* widgetA = new QWidget();
widgetA->setObjectName("widgetA");
widgetA->setLayout(new QVBoxLayout());
//example buttons as child for widgetA
QPushButton *p = new QPushButton("0",widgetA);
widgetA->layout()->addWidget(p);
p = new QPushButton("1",widgetA);
widgetA->layout()->addWidget(p);
p = new QPushButton("2",widgetA);
widgetA->layout()->addWidget(p);
p = new QPushButton("3",widgetA);
widgetA->layout()->addWidget(p);
//widgetB, all similar to widgetA
QWidget* widgetB = new QWidget();
widgetB->setObjectName("widgetB");
widgetB->setLayout(new QVBoxLayout());
widgetA->setStyleSheet("QWidget#widgetA{background-color: #ff0000;}");
widgetB->setStyleSheet("QWidget#widgetB{background-color: #00ff00;}");
p = new QPushButton("1",widgetB);
widgetB->layout()->addWidget(p);
p = new QPushButton("2",widgetB);
widgetB->layout()->addWidget(p);
p = new QPushButton("3",widgetB);
widgetB->layout()->addWidget(p);
//add both widgets to splitter
splitter->addWidget(widgetA);
splitter->addWidget(widgetB);
//add splitter to base layout
this->layout()->addWidget(splitter);
}输出

https://stackoverflow.com/questions/65288248
复制相似问题