В моем графическом интерфейсе у меня есть прокручиваемая область и виджет, который будет отображаться в ней, такой как:
_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);
Редактировать: я создал минималистичный демо в ветке «demo» на git: //l3u.de: muckturnier.git — Я был бы очень рад, если бы кто-нибудь мог объяснить это поведение!
Хорошо, теперь я могу ответить на свой вопрос сам. Это связано с тем, что QScrollArea :: setWidget () вызывает setAutoFillBackground (true) для добавленного виджета. Когда я добавляю руководство
_scoreBoxWidget->setAutoFillBackground(false);
после
_scoreBoxScroll->setWidget(_scoreBoxWidget);
цвет фона, как и ожидалось.