自定义QWidget中的背景颜色错误

时间:2014-07-13 10:31:36

标签: c++ qt qt4 kde

在我的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的背景颜色错误: Widgets with wrong background color

当我在构造函数中使用相同的代码添加这些小部件(并且_db调用替换为静态值时,如同调用构造函数时,还没有_db),小部件将以正确的颜色显示: Widgets with correct background color

如果这很有趣:整个代码可以在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>

1 个答案:

答案 0 :(得分:1)

好的,我现在可以自己回答我的问题。这是因为QScrollArea :: setWidget()在添加的小部件上调用setAutoFillBackground(true)。当我添加手册

_scoreBoxWidget->setAutoFillBackground(false);

之后

_scoreBoxScroll->setWidget(_scoreBoxWidget);

背景颜色与预期一致。