删除QListView背景

时间:2011-08-09 15:49:40

标签: qt background qlistview

我想删除QListView的背景,以便可以看到下面的背景。我怎么能这样做?

我尝试了setAttribute(Qt::WA_NoSystemBackground)setAttribute(Qt::WA_NoBackground),但这并未改变任何内容。此外,我无法覆盖paintEvent(),否则它不会绘制项目。

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

不要忘记QScrollArea是QListView的基类,它包含名为Viewport的“另一个”小部件。它可以通过viewport()方法加入。

实现透明度您只需致电:

viewport()->setAutoFillBackground( false );

并且取决于其他设置(即父窗口小部件设置)您应该看到背景。

答案 1 :(得分:1)

答案取决于您的QListView是否为顶级窗口小部件。 QWidget docs on transparency详细解释。对于顶级窗口小部件,它可能很简单:

view->setWindowOpacity(50);

对于不是顶级的窗口小部件,您希望将背景设置为带有Alpha通道的窗口:

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

你也应该能够用样式表做同样的事情:

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

您可能需要将autoFillBackground设置为false,以便窗口小部件不会自动填充背景。