如何冲洗Qwidget绘画搜索



我正在使用自定义样式的Qmessagebox。在我的自定义QStyle类中,我致电:

if( (pDialog = qobject_cast<QDialog*>( pWidget )) != NULL )
{
    pDialog->setWindowFlags( pDialog->windowFlags() | Qt::FramelessWindowHint );
    // Allow QStyle draw widget background
    pDialog->setAttribute( Qt::WA_StyledBackground, true );
    // Set window background transparent
    QPalette oPalette = pDialog->palette();
    oPalette.setBrush( QPalette::Window, QBrush(Qt::transparent) );
    pDialog->setPalette( oPalette );
}

这可以正常工作,除非我们使用半透明的边框:半透明的部分在每个重新粉刷上都会变得越来越暗(例如,按下"显示详细信息"/" hide defact"多次时)。

)。

更新:我刚刚意识到,当移动消息框时," dark soo-toremi-transparent content "也会移动。因此,我想冲洗Qwidget绘画搜索 - 如果存在类似的东西(备份商店??)。

该解决方案来自第268行中的src/gui/dialogs/qdialog.cpp:

#ifdef Q_WS_S60
if (S60->avkonComponentsSupportTransparency) {
    bool noSystemBackground = testAttribute(Qt::WA_NoSystemBackground);
    // also sets WA_NoSystemBackground
    setAttribute(Qt::WA_TranslucentBackground);
    // restore system background attribute
    setAttribute(Qt::WA_NoSystemBackground, noSystemBackground); 
}
#endif

如果仅设置qt :: wa_nosystembackground,我才意识到,根本没有绘制背景 - 甚至不是QT触发的wa_nosystembackground!

这是由qwidget :: setAttribute()方法引起的,该方法将qt :: wa_nosystembackground设置为true,当设置qt :: wa__translucentbackground时。上方的解决方法(这是官方QT代码!!)解决了这个问题。

最新更新