一般QT 无边框窗口设置以下属性即可实现无边框,但新的问题出现,无法移动、双击自己定义的标题栏后全屏显示和拉伸窗口的操作。
setAttribute(Qt::WA_Hover); //很重要,禁止父窗口影响子窗口样式
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);
解决拉伸窗口问题需要重写nativeEvent,解决移动和双击全屏功能需在自定义标题栏重写鼠标按下事件和鼠标双击事件。
使用时,将窗口继承于CFrameLessWidgetBase类即可。
CFrameLessWidgetBase.h //无边框窗口公共类头文件
#pragma once
#include <QWidget>
class CFrameLessWidgetBase :
public QWidget
{
public:
CFrameLessWidgetBase(QWidget* p = nullptr);
~CFrameLessWidgetBase() {}
protected:
bool nativeEvent(const QByteArray& eventType, void* message, long* result) override;
private:
int m_nBorderWidth = 5;
};
CFrameLessWidgetBase.cpp //无边框窗口公共类源文件
#include "CFrameLessWidgetBase.h"
#include <qt_windows.h>
#include <windows.h>
#include <windowsx.h>

最低0.47元/天 解锁文章
6179

被折叠的 条评论
为什么被折叠?



