Closed zhoujun637 closed 6 months ago
首先 Windows 11 就是圆角。如果你想在 Windows 7 或者 Windows 10 上也用上圆角,那只有一个办法,就是关掉系统边框选项,把QWINDOWKIT_ENABLE_WINDOWS_SYSTEM_BORDERS
关掉,然后设置 QWidget 属性把背景弄透明,自己画圆角,这样做的话标题栏特性和窗口贴边特性都还在,但是你说的那种弹窗阴影闪烁啥的是系统边框带来的,这部分系统特性就没了。至少在 Windows 10 上,圆角和系统边框是冲突的。
实现了。关掉系统边框之后,自绘圆角边框和阴影。针对边框与阴影闪烁的实现,就需要重写nativeEvent
bool MyDialog::nativeEvent(const QByteArray& eventType, void* message, long* result)
{
Q_UNUSED(eventType);
if ("windows_generic_MSG" == eventType)
{
MSG* pMsg = reinterpret_cast<MSG*>(message);
if (pMsg->message == WM_NCACTIVATE)
{
bool active = (bool)(pMsg->wParam);
if (active)
{
//获取焦点后的窗口边框与阴影
}
else
{
//失去焦点后的窗口边框与阴影
}
return true;
}
}
return QDialog::nativeEvent(eventType, message, result);
}
在win上实现圆角的dialog 我用Qt::FramelessWindowHint特性,然后自己绘制阴影和背景,虽然可以实现,但是原来系统自带的效果(如:点击窗口外部,弹窗阴影闪烁)没有了,我希望在保留系统特性的情况下,实现圆角dialog