【问题标题】:Remove QListView background删除 QListView 背景
【发布时间】:2011-08-09 15:49:39
【问题描述】:

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

我尝试了setAttribute(Qt::WA_NoSystemBackground)setAttribute(Qt::WA_NoBackground),但这并没有改变任何东西。我也不能覆盖paintEvent(),否则它不会绘制项目。

有什么想法吗?

【问题讨论】:

    标签: qt background qlistview


    【解决方案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;") 成功了!
      猜你喜欢
      • 1970-01-01
      • 2016-08-06
      • 2015-04-08
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多