2010-11-25 83 views
8

我需要创建一个qt小部件,该小部件将充当其他小部件的父级,并将它们排序。完全透明背景的qt小部件

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

我认为做这样的:

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

    QWidget *thisWidget; 
}; 

你认为我需要设置属性,或者它会没有它好工作?

+0

你真的需要一个_transparent_背景,或者是足够了_no_背景是什么?这是一个真正的区别:透明背景下,操作系统会告诉_underlying_窗口绘制像素。没有背景,操作系统只是期望孩子们画整个窗口。 – MSalters 2010-11-25 16:22:38

+0

@MSalters这个小部件位于一个窗口中,只有这个小部件的子部件应该可见。无论这个小部件背后是什么(如果没有被一个小部件覆盖)应该被看到。 – 2010-11-25 16:28:10

+0

我不确定我是否理解这个问题......在Qt4中默认情况下,QWidget不会为自己的背景画任何东西,只会绘制其子项。 – 2010-12-01 22:21:11

回答

3

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

2

你应该能够改变你的控件的样式做你需要的所有图纸定制我认为

MyWidget {background-color: none;}

应该工作,样式表可以很容易地在设计测试

0

你可能想看看:

的setAttribute(Qt的:: WA_NoSystemBackground,真正的);

的setAttribute(Qt的:: WA_OpaquePaintEvent,FALSE);

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);