Неправильный цвет фона в пользовательском QWidget

В моем графическом интерфейсе у меня есть прокручиваемая область и виджет, который будет отображаться в ней, такой как:

_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 — Я был бы очень рад, если бы кто-нибудь мог объяснить это поведение!

1

Решение

Хорошо, теперь я могу ответить на свой вопрос сам. Это связано с тем, что QScrollArea :: setWidget () вызывает setAutoFillBackground (true) для добавленного виджета. Когда я добавляю руководство

_scoreBoxWidget->setAutoFillBackground(false);

после

_scoreBoxScroll->setWidget(_scoreBoxWidget);

цвет фона, как и ожидалось.

1

Другие решения


По вопросам рекламы [email protected]