教你Qt设置Popup时出现窗口阴影去掉方法

  [cpp] view plaincopy

CFlowerWid::CFlowerWid(QWidget *parent)

: QWidget(parent)

{

ui.setupUi(this);

setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::Popup);

setAttribute(Qt::WA_TranslucentBackground);

}

窗口设置为Qt::Popup时, window7下会自带一个阴影.如何去掉窗口阴影?

代码:

[cpp] view plaincopy

bool CFlowerWid::event(QEvent *event)

{

// class_ameneded 不能是custommenu的成员, 因为winidchange事件触发时, 类成员尚未初始化

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

}

需要执行Windows函数,[cpp] view plaincopy

SetClassLong(hwnd, GCL_STYLE, class_style);

通过上执行windows函数代码,可以有效去除Popup出现窗口阴影的问题。

以上就是重庆上门修电脑说的Qt设置Popup时出现窗口阴影去掉方法


-