删除 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 背景的主要内容,如果未能解决你的问题,请参考以下文章

在 qListView 中,已删除的项目不会在视图中更新

Qt拖放QListView删除它被释放的项目

QListView如何设置字体删除

Qt - 如何将 QListView 项目转移到另一个 QListView?

QListview获取Item内容变化信号及内容

QListView 仅在视图中显示单个项目