首页| 论坛| 消息

标题:关于窗口半透明、窗口叠加、弹出操作菜单的问题
作者:cuiwanfu
日期:2013-07-27 16:06
内容:

各位大侠:
本人Qt菜鸟,初来乍到,望各位多多指教!
我现在想要做一个界面,大致功能是这样的。首先在QMainWindow中显示动态的图片,然后菜单上面有按钮,当我点击按钮时会在MainWindow的左侧显示出一个半透明的操作菜单!
这个功能在win7上我是这样实现的,当点击按钮时创建一个父窗口是MainWindow的父窗口的widget类,然后设置这个widget类的透明度,这样的话在win7上马马虎虎可以用,但是移到Xp时,就会发现这个弹出的窗口就会映射上一点MainWindow上面显示的图片,但是不会随着背景图片的变化而变化,请各位大神指点下,急求!!!!!!!!!!!

下面是弹出widget的设置透明的代码
setAttribute(Qt::WA_TranslucentBackground, true);
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
setWindowOpacity(0.7);


#1 [彩阳 07-28 23:46]
“个父窗口是MainWindow的父窗口的widget类,然后设置这”
应该是“子窗口”吧?怎么觉得这句话不对。
你出现的这种情况应该是widget没有update()里面的内容,自己手动调用update()槽看看。
#2 [cuiwanfu 07-29 09:48]
_pOperatorWidget = new COperatorWidget(_pParentWidget);
_pOperatorWidget->show();
_pOperatorWidget->raise();
这是我在MainWindow中的窗口中创建子窗口的语句,其中_pParentWidget是我获取到的MainWindow的父窗口,透明的语句是在COperatorWidget类的构造函数中实现的!
QPalette pal;
pal.setColor(QPalette::Background, QColor(125, 125, 125, 255));
pal.setColor(QPalette::Foreground, QColor(255, 0, 0, 255));
setPalette(pal);
setAutoFillBackground(true);
//设置窗口的透明度
setAttribute(Qt::WA_TranslucentBackground, true);
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
setWindowOpacity(0.7);
如果使用这样的语句的话在Win7中是可以实现的,但是在Xp系统下,就会出现闪烁,同时_pOperatorWidget 的半透明的背景色就会映射一块MainWindow的背景色,然后这块的颜色就不在随着MainWidow的变化而变化!
_pOperatorWidget = new COperatorWidget(this);
如果使用这个语句的话,_pOperatorWidget的背景色就会变为全黑,并且不透明!
我就是想实现在一个大的窗口上显示一个操作菜单,这个操作菜单是透明的,以不至于挡住大窗口中的显示内容!如果我的上面的做法是不正确的,请各位给指条路,谢谢大家了!
#3 [neil-wen 08-08 13:53]
顶一下
#4 [hayixia512 08-15 15:14]
顶一个 看看帅气的头像

回复 发表
主题 版块