QT界面设置为Qt::Popup属性时, 在win7系统下,窗口会显示阴影问题解决。

CBubbleFrame::CBubbleFrame(QWidget *parent)
        : QFrame(parent)
    {
        ui.setupUi(this);
        setWindowOpacity(1);
        setWindowFlags(windowFlags() | Qt::FramelessWindowHint| Qt::Popup);
        setAttribute(Qt::WA_TranslucentBackground);


    }

重写事件方法:

        virtual bool event(QEvent *event);

  bool CBubbleFrame::event(QEvent *event)
    {
        static bool class_amended = false;
        if (event->type() == QEvent::WinIdChange)
        {
            HWND hwnd = reinterpret_cast(winId());
            if (class_amended == false)
            {
                class_amended = true;
                DWORD class_style = ::GetClassLong(hwnd, GCL_STYLE);
                class_style &= ~CS_DROPSHADOW;
                ::SetClassLong(hwnd, GCL_STYLE, class_style); // windows系统函数
            }
        }
        return QWidget::event(event);
    }

 

你可能感兴趣的:(qt)