qt 使用 setSoftKeyRole后透明对话框不能动态显示主背景

时间:2022-09-18 06:04:07
高手救命!
我使用camerawrapper,并处于viewfinder状态,就是camera没有capture的状态,可以动态显示图片,现在是希望弹出的对话框是半透明的状态,而且主背景也就是camera的图片是一直处于动态的,但是现在出现了一些问题:
根据网上可知,透明方法:
继承QDialog的一个对话框的构造函数中setAttribute(Qt::WA_TranslucentBackground, true);
paintEvent里面
QPainter p(this); 
p.fillRect( 10, 10, 300, 300, QColor(220,220,220,50));
resize函数到QApplication::desktop()->availableGeometry(0)的宽度和高度
结果: 在客户区可以透明显示,但是cba仍然显示的是主背景的exit。

为了增加cba,我加上了setSoftKeyRole,这个按钮是处于cba的位置。
增加一个QAction,然后把它加入QDialog,再调用QAction的成员函数setSoftKeyRole(QAction::PositiveSoftKey),
再connect dialog的槽accept函数,这个时候完全没有背景,弹出来的框确实有了ok按钮,窗体是与按钮一样的颜色。
我在paintEvent里面,改成
QPainter p(this); 
p.setCompositionMode( QPainter::CompositionMode_Clear ); 
p.fillRect( 10, 10, 300, 300, Qt::SolidPattern ); 
这个时候确实能显示透明的效果了,但是却是静态的对话框弹出的图片,移动手机,也不能随camera改变了。

1 个解决方案

#1


随便说一下,setWindowOpacity,无效。
QPalette pal = palette(); 
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00)); 
setPalette(pal);
也是效果相同,固定的半透明图片。

#1


随便说一下,setWindowOpacity,无效。
QPalette pal = palette(); 
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00)); 
setPalette(pal);
也是效果相同,固定的半透明图片。