具有完全透明背景的qt小部件

时间:2010-11-25 15:43:32

标签: c++ qt widget transparent

我需要创建一个qt小部件,它将作为其他小部件的父级,并将对它们进行排序。

现在,问题是如何让它的背景完全透明?

我想这样做:

struct Imp
{
  Imp( QWidget *parent ) : thisWidget( new QWidget( parent ) )
  {
    thisWidget->setAttribute( Qt::WA_TranslucentBackground, true );
  }

  QWidget *thisWidget;
};

你认为我需要设置属性,还是没有它可以正常工作?

5 个答案:

答案 0 :(得分:3)

默认情况下,在Qt4中,QWidget不会为自己的背景绘制任何内容,只会绘制其子项。如果要覆盖它,您必须告诉窗口小部件通过其中一个属性绘制其背景。请注意,从QWidget派生的一些小部件将自动绘制背景。

答案 1 :(得分:2)

您应该能够通过更改我认为的小部件样式来完成所需的所有绘图自定义

MyWidget {background-color: none;}

应该可以使用,样式表可以很容易地在设计器中进行测试

答案 2 :(得分:0)

您可能需要查看:

setAttribute(Qt :: WA_NoSystemBackground,true);

setAttribute(Qt :: WA_OpaquePaintEvent,false);

答案 3 :(得分:0)

对我有用的解决方案(我为QTextEditor设置了透明背景):

auto editorPalette = editorWidget->palette();
editorPalette.setColor(QPalette::Active, QPalette::Base, Qt::transparent);
editorPalette.setColor(QPalette::Inactive, QPalette::Base, Qt::transparent);
editorWidget->setPalette(editorPalette);

答案 4 :(得分:-1)

不知道它是否完全解决了您的问题,但它是discussed in this article

文档位于http://doc.qt.nokia.com/4.1/qwidget.html#transparency-and-double-buffering

解决方案适用于Qt4.1,但应该是相关的。