【发布时间】:2011-08-09 15:49:39
【问题描述】:
我想删除我的 QListView 的背景,以便可以看到下面的背景。我该怎么做?
我尝试了setAttribute(Qt::WA_NoSystemBackground) 和setAttribute(Qt::WA_NoBackground),但这并没有改变任何东西。我也不能覆盖paintEvent(),否则它不会绘制项目。
有什么想法吗?
【问题讨论】:
标签: qt background qlistview
我想删除我的 QListView 的背景,以便可以看到下面的背景。我该怎么做?
我尝试了setAttribute(Qt::WA_NoSystemBackground) 和setAttribute(Qt::WA_NoBackground),但这并没有改变任何东西。我也不能覆盖paintEvent(),否则它不会绘制项目。
有什么想法吗?
【问题讨论】:
标签: qt background qlistview
不要忘记 QScrollArea,它是 QListView 的基类,它包含称为 Viewport 的“另一个”小部件。可以通过 viewport() 方法访问。
要实现透明度,您只需调用:
viewport()->setAutoFillBackground(false);
并取决于其他设置(即父小部件设置),您应该会看到背景。
【讨论】:
答案取决于您的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;") 成功了!