代码之家  ›  专栏  ›  技术社区  ›  BЈовић

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

  •  8
  • BЈовић  · 技术社区  · 14 年前

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

    现在,问题是如何使背景完全透明?

    我想这样做:

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

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

    5 回复  |  直到 14 年前
        1
  •  4
  •   Caleb Huitt - cjhuitt    14 年前

    默认情况下,在Qt4中,QWidget不会为自己的背景绘制任何内容,只会绘制其子级。如果您想覆盖它,您必须明确地告诉小部件通过其属性之一绘制其背景。注意,一些来自QWidget的widget将自动绘制背景。

        2
  •  2
  •   eyllanesc RAHUL KUMAR    5 年前

    我认为你应该可以通过改变你的小部件的样式来完成你所需要的所有绘图定制

    MyWidget {background-color: none;}
    

    如果可以,样式表可以很容易地在设计器中测试

        3
  •  0
  •   Violet Giraffe    7 年前

    对我有效的解决方案(我为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
  •  0
  •   eyllanesc RAHUL KUMAR    5 年前

    你可能想看看:

    setAttribute( Qt::WA_NoSystemBackground, true );
    

    setAttribute( Qt::WA_OpaquePaintEvent, false );
    
        5
  •  -1
  •   Martin Beckett    14 年前

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

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

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