Удалить фон QListView

Я хочу удалить фон моего QListView, чтобы можно было увидеть фон ниже. Как я могу это сделать?

Я пробовал setAttribute(Qt::WA_NoSystemBackground) и setAttribute(Qt::WA_NoBackground), но это ничего не изменило. Также я не могу переопределить paintEvent(), иначе он не отрисовывает элементы.

Любая идея?


person laurent    schedule 09.08.2011    source источник


Ответы (2)


Не забывайте, что QScrollArea, базовый класс для QListView, содержит "другой" виджет, который называется Viewport. Доступ к нему можно получить через метод viewport().

Чтобы добиться прозрачности, вы можете просто позвонить:

viewport()->setAutoFillBackground( false );

и в зависимости от других настроек (например, настроек родительского виджета) вы должны увидеть фон.

person rob    schedule 06.02.2012

Ответ зависит от того, является ли ваш QListView виджетом верхнего уровня. В документах QWidget о прозрачности дается подробное объяснение. Для виджета верхнего уровня это может быть так же просто, как:

view->setWindowOpacity(50);

Для виджета не верхнего уровня вы хотите установить фон с альфа-каналом:

QPalette palette = view->palette();
palette.setColor(QPalette::Background, Qt::transparent);
view->setPalette(palette);

Вы также должны иметь возможность делать то же самое с таблицами стилей:

view->setStyleSheet("background-color: transparent;");

Возможно, вам потребуется установить для параметра autoFillBackground значение false, чтобы виджет не заполнять фон автоматически.

person Kaleb Pederson    schedule 09.08.2011
comment
Большое спасибо за все эти предложения, я попробовал их все. Итак, после того, как я попробовал setAttribute(Qt::WA_NoSystemBackground), setAttribute(Qt::WA_NoBackground), view->setPalette(palette), setAutoFillBackground(false), последний, который я пробовал, view->setStyleSheet("background-color: transparent;") сработал! - person laurent; 09.08.2011