在我的GUI中,我有一个可滚动的区域和一个要显示的小部件,如下所示:
_scoreBoxScroll = new QScrollArea(this);
_scoreBoxScroll->setFrameShape(QFrame::NoFrame);
_scoreBoxWidget = new QWidget(this);
_scoreBoxWidgetLayout = new QHBoxLayout(_scoreBoxWidget);
稍后会在函数中添加一些自定义小部件:
for (int i = 1; i <= _db->gamesPerRound(); ++i) {
GameWidget *newGame = new GameWidget(_scoreBoxWidget, i, _db->playersString(MT::singular), _db->boogerScore());
_scoreBoxWidgetLayout->addWidget(newGame);
}
_scoreBoxScroll->setWidget(_scoreBoxWidget);
这导致GameWidgets的背景颜色错误:
当我在构造函数中使用相同的代码添加这些小部件(并且_db调用替换为静态值时,如同调用构造函数时,还没有_db),小部件将以正确的颜色显示:
如果这很有趣:整个代码可以在git://l3u.de/muckturnier.git找到,发布的代码位于ScorePage / ScorePage.cpp。
为什么这里会显示不同的颜色?我该如何解决这个问题?提前感谢您的帮助!
编辑:第二个例子中使用的构造函数中的代码是(因为我没有_db):
_scoreBoxWidget = new QWidget(this);
_scoreBoxWidgetLayout = new QHBoxLayout(_scoreBoxWidget);
_scoreBoxLayout->addWidget(_scoreBoxWidget);
for (int i = 1; i <= 2; ++i) {
GameWidget *newGame = new GameWidget(this, i, QString::fromUtf8("Paar"), 21);
_scoreBoxWidgetLayout->addWidget(newGame);
}
_scoreBoxScroll->setWidget(_scoreBoxWidget);
编辑:我在git上的“demo”分支中创建了一个简约演示://l3u.de:muckturnier.git - 如果有人能解释这种行为,我会很高兴!< / p>
答案 0 :(得分:1)
好的,我现在可以自己回答我的问题。这是因为QScrollArea :: setWidget()在添加的小部件上调用setAutoFillBackground(true)。当我添加手册
时_scoreBoxWidget->setAutoFillBackground(false);
之后
_scoreBoxScroll->setWidget(_scoreBoxWidget);
背景颜色与预期一致。