删除 QListView 背景
Posted
技术标签:
【中文标题】删除 QListView 背景【英文标题】:Remove QListView background 【发布时间】:2011-08-09 15:49:39 【问题描述】:我想删除我的 QListView 的背景,以便可以看到下面的背景。我该怎么做?
我尝试了setAttribute(Qt::WA_NoSystemBackground)
和setAttribute(Qt::WA_NoBackground)
,但这并没有改变任何东西。我也不能覆盖paintEvent()
,否则它不会绘制项目。
有什么想法吗?
【问题讨论】:
【参考方案1】:不要忘记 QScrollArea,它是 QListView 的基类,它包含称为 Viewport 的“另一个”小部件。可以通过 viewport() 方法访问。
要实现透明度,您只需调用:
viewport()->setAutoFillBackground(false);
并取决于其他设置(即父小部件设置),您应该会看到背景。
【讨论】:
【参考方案2】:答案取决于您的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,以便小部件不会自动填充背景。
【讨论】:
非常感谢所有这些建议,我都试过了。因此,在尝试了setAttribute(Qt::WA_NoSystemBackground)
、setAttribute(Qt::WA_NoBackground)
、view->setPalette(palette)
、setAutoFillBackground(false)
之后,我尝试的最后一个 view->setStyleSheet("background-color: transparent;")
成功了!以上是关于删除 QListView 背景的主要内容,如果未能解决你的问题,请参考以下文章