我想删除QListView的背景,以便可以看到下面的背景。我怎么能这样做?
我尝试了setAttribute(Qt::WA_NoSystemBackground)
和setAttribute(Qt::WA_NoBackground)
,但这并未改变任何内容。此外,我无法覆盖paintEvent()
,否则它不会绘制项目。
有什么想法吗?
答案 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,以便窗口小部件不会自动填充背景。