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

C++ 自定义QWidget中的背景颜色错误,c++,qt,qt4,kde,C++,Qt,Qt4,Kde,在我的GUI中,我有一个可滚动区域和一个要显示在其中的小部件,定义如下: \u scoreBoxScroll=新的QScrollara(本); _scoreBoxScroll->setFrameShape(QFrame::NoFrame); _scoreBoxWidget=新的QWidget(此); _scoreBoxWidgetLayout=新的QHBoxLayout(_scoreBoxWidget); 一些自定义小部件稍后会添加到函数中: for(int i=1;i gamesPerRou

在我的GUI中,我有一个可滚动区域和一个要显示在其中的小部件,定义如下:

\u scoreBoxScroll=新的QScrollara(本);
_scoreBoxScroll->setFrameShape(QFrame::NoFrame);
_scoreBoxWidget=新的QWidget(此);
_scoreBoxWidgetLayout=新的QHBoxLayout(_scoreBoxWidget);
一些自定义小部件稍后会添加到函数中:

for(int i=1;i gamesPerRound();++i){
GameWidget*newGame=newgamewidget(_scoreBoxWidget,i,_db->playersString(MT::singular),_db->boogerScore());
_scoreBoxWidgetLayout->addWidget(新游戏);
}
_scoreBoxScroll->setWidget(_scoreBoxWidget);
这会导致GameWidgets的背景颜色错误:

当我在构造函数中添加具有相同代码的小部件时(并且_db调用替换为静态值,就像调用构造函数时,还没有_db),小部件以正确的颜色显示:

如果这是有趣的:整个代码可以在git://l3u.de/muckturnier.git,发布的代码位于ScorePage/ScorePage.cpp中

为什么这里会显示不同的颜色?我怎样才能解决这个问题?提前感谢您的帮助

编辑:第二个示例中使用的构造函数中的代码是(因为我没有_db):

\u scoreBoxWidget=新的QWidget(此);
_scoreBoxWidgetLayout=新的QHBoxLayout(_scoreBoxWidget);
_scoreBoxLayout->addWidget(\u scoreBoxWidget);
for(int i=1;i addWidget(newGame);
}
_scoreBoxScroll->setWidget(_scoreBoxWidget);

编辑:我在上的“演示”分支中创建了一个极简演示git://l3u.de:muckturnier.git–如果有人能解释这种行为,我将非常高兴!

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

_scoreBoxWidget->setAutoFillBackground(false);
之后

_scoreBoxScroll->setWidget(_scoreBoxWidget);

背景颜色与预期的一样。

如果您还提供了“静态”版本的代码,并且一切正常,那会很有帮助。请不要介意我,但当有人说:“基本相同”时,我有点怀疑。我只是将代码添加到构造函数中,唯一的区别是:GameWidget*newGame=new GameWidget(这个,i,QString::fromUtf8(“Paar”),21);和一个literal 2,而不是_db->gamesPerRound()。只需在上面添加的代码中再次尝试。我只是注释掉了重载()的内容函数,并将带有静态值的代码添加到构造函数的末尾。给出上面发布的结果,您可以使用git代码进行尝试:只需构建它,创建一个空数据库(“Neues Turnier starten”),然后转到“Spilergebnisse eintragen”选项卡。哦,我忘了说:代码当前正在“工作”分支,不是在master中。这非常有趣。包含小部件设置的函数是ScorePage::reload()。它是从另一个类调用的,该类持有指向ScorePage:MainWindow::SetCoreTabEnabled()的指针。如果从那里调用reload(),我会得到错误的颜色。当我调用同一个函数时(将_db调用更改为静态值)从ScorePage的构造器来看,颜色是正确的。这怎么会有区别呢?!