#include "FramelessWindow.h" #include "FrameTitleBar.h" #include "FramelessDelegate.h" FramelessWindow::FramelessWindow(QWidget* parent) : QFrame(parent) { setWindowFlags(windowFlags() | Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint); // 初始化平台相关的无边框委托,用于命中测试和缩放。 delegate_ = FramelessDelegate::Create(this); } FramelessWindow::~FramelessWindow() { } void FramelessWindow::SetTitleBar(FrameTitleBar* titleBar) { titleBar->SetMainWidget(this); if (delegate_) { // 通知委托当前标题栏,以便把它作为可拖动区域处理。 delegate_->SetTitleBar(titleBar); } } #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) bool FramelessWindow::nativeEvent(const QByteArray& eventType, void* message, qintptr* result) { #else bool FramelessWindow::nativeEvent(const QByteArray & eventType, void* message, long* result) { #endif // 先让无边框委托处理原生事件(如 WM_NCHITTEST 以支持边缘拖动缩放)。 if (delegate_ && delegate_->nativeEvent(eventType, message, result)) { return true; } return QFrame::nativeEvent(eventType, message, result); }