如下图:
无边框界面只需继承下面的基类即可。
WinNoFrameUI.h
#ifndef WINNOFRAMEUI_H
#define WINNOFRAMEUI_H
#include <QWidget>
#include <QLabel>
#include <QFrame>
class QToolButton;
#define MARGIN 5 // 四个角的长度,伸缩窗口时用到
class WinNoFrameUI : public QWidget
{
Q_OBJECT
public:
WinNoFrameUI(QWidget *parent = NULL);
~WinNoFrameUI();
void SetWindowTitle(const QString title);
void SetWindowTitleIcon(const QIcon icon);
void SetWindowTitleColor(const QString sColor);
void CreateWindowButton();
int countFlag(QPoint p, int row); // 计算鼠标在哪一列和哪一行
void setCursorType(int flag); // 根据鼠标所在位置改变鼠标指针形状
int countRow(QPoint p); // 计算在哪一列
protected:
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseDoubleClickEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
private slots:
void showMinWindow();
void showMaxWindow();
public:
QWidget * m_pWidget;
QToolButton * m_pTitleTBtn; // 窗口标题
QToolButton * m_pMinTBtn; // 最小化按钮
QToolButton * m_pMaxTBtn; // 最大化按钮
QToolButton * m_pCloseTBtn; // 关闭按钮
QFrame * m_pLine; // 标题栏分割线
private:
bool m_Drag; //判断鼠标左键是否按下
QPoint m_DragPosition; // 用于移动窗口
bool m_bMoved; // true:正在移动
int curPos; // 用于判断是移动窗口还是伸缩窗口
};
#endif // WINNOFRAMEUI_H
WinNoFrameUI.cpp
#include "WinNoFrameUI.h"
#include <QToolButton>
#include <QMouseEvent>
#include <QStyle>
#include <QHBoxLayout>
#include <QApplication>
#include <QDesktopWidget>
#include <QDebug>
WinNoFrameUI::WinNoFrameUI(QWidget *parent)
: QWidget(parent)
{
m_bMoved = false;
this