C++ 具有完全透明背景的qt小部件
我需要创建一个qt小部件,它将作为其他一些小部件的父部件,并对它们进行排序 现在,问题是如何使它的背景完全透明 我想这样做:C++ 具有完全透明背景的qt小部件,c++,qt,widget,transparent,C++,Qt,Widget,Transparent,我需要创建一个qt小部件,它将作为其他一些小部件的父部件,并对它们进行排序 现在,问题是如何使它的背景完全透明 我想这样做: struct Imp { Imp( QWidget *parent ) : thisWidget( new QWidget( parent ) ) { thisWidget->setAttribute( Qt::WA_TranslucentBackground, true ); } QWidget *thisWidget; }; 你认为我
struct Imp
{
Imp( QWidget *parent ) : thisWidget( new QWidget( parent ) )
{
thisWidget->setAttribute( Qt::WA_TranslucentBackground, true );
}
QWidget *thisWidget;
};
你认为我需要设置该属性吗,或者没有它它它可以正常工作吗?不知道它是否完全解决了你的问题,但它确实解决了 文件载于
解决方案适用于Qt4.1,但应该是相关的。我认为,通过更改小部件的样式,您应该能够完成所需的所有图形自定义
MyWidget{背景色:无;}
如果可行,样式表可以很容易地在设计器中测试。默认情况下,在Qt4中,QWidget不会为其自身背景绘制任何内容,只绘制其子项。如果你想覆盖它,你必须特别告诉小部件通过它的一个属性来绘制它的背景。请注意,从QWidget派生的一些小部件将自动绘制背景。您可能需要查看:
setAttribute(Qt::WA_NoSystemBackground,true);
及
setAttribute(Qt::WA_OpaquePaintEvent,false);
对我有效的解决方案(我正在为QTextEditor设置透明背景):
你真的需要一个透明的背景,还是没有背景就足够了?这是一个真正的区别:在透明背景下,操作系统将告诉底层窗口绘制像素。在没有背景的情况下,操作系统只希望子部件绘制整个窗口。@mAlters此小部件放置在窗口中,并且只有此小部件的子部件应可见。应该看到这个小部件背后的内容(如果没有包含在子小部件中的话)。我不确定我是否理解这个问题。。。默认情况下,在Qt4中,QWidget不会为自己的背景绘制任何内容,只会绘制其子项。@Caleb Yes,这就是正确答案。你为什么以评论的形式回答?可能与第一个链接中的重复,他们谈到使用setBackgroundRole(Qpalete::NoRole)。如果在QLineEdit上这样做,它会将背景从透明变为白色(我使用PyQt),甚至是不需要的。有趣的效果。但我同意使用qss在大多数情况下都很舒服。
无
“的背景色对我不起作用,但“透明
”对我起作用。如果我只想取消设置以前的背景(背景角色
)。@TomášZato:查询和记住以前设置的最简单方法,然后用它来恢复它。更困难的方法之一是查询小部件的父级,获取父级的后台角色,并在小部件上设置该角色。如果您需要保持调色板的其余部分不变,那么所有这些都很复杂。
auto editorPalette = editorWidget->palette();
editorPalette.setColor(QPalette::Active, QPalette::Base, Qt::transparent);
editorPalette.setColor(QPalette::Inactive, QPalette::Base, Qt::transparent);
editorWidget->setPalette(editorPalette);