0

我在 Windows 10 Pro 上使用 Qt Creator 4.13.1 和 Qt 5.15.1。

我是在 Qt 中使用样式表的新手,并且对可能考虑的选择器QSplitter及其子项感到有些困惑。我想让 2 个孩子用分离器手柄分开,并用不同的颜色绘制他们的背景。

这是一个示例场景

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(eg QLabels, QPushButtons, ...) 的所有子小部件,但不适用于它们周围的widgetA本身
  • splitter->setStyleSheet("background-color: #ff0000;");适用于widgetA,widgetB和句柄以及下面的所有小widgetA部件widgetB
  • 命名widgetA->setObjectName("Tim");splitter->setStyleSheet("QWidget#Tim {background-color: #ff0000;}");这根本没有影响。
  • [编辑] splitter->setStyleSheet("QSplitter QWidget #Andy {background-color: #ff0000;}");仅将背景应用于任一子小部件内的某个小部件。但是使用splitter->setStyleSheet("QSplitter #Tim {background-color: #ff0000;}");(再次)完全没有效果。

我将如何单独设置background-colorof widgetA,因此不影响子级widgetA或其他拆分器子级widgetB

4

1 回答 1

0

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);
}

输出

输出

于 2020-12-14T15:11:52.820 回答