Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有完全透明背景的qt小部件_C++_Qt_Widget_Transparent - Fatal编程技术网

C++ 具有完全透明背景的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; }; 你认为我

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

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

我想这样做:

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