1. 主界面效果
效果关键点:
1)拖动标题栏可实现主界面拖动
2)logo图标名称及主界面背景
3)最小化及关闭
2.思路分析
1)背景图片及logo图标的设定比较简单,通过stylesheet即可实现。通过QWidget的拖动即可实现这些设定。
2)主界面可用QWidget控件来实现,继承QWidget类进行继承实现拖动、最小化、关闭按钮功能即可。
3.代码分析
3.1 创建主界面
主界面stylesheet:
border-image: url(:/images/background.png);
最小化按钮stylesheet:
QPushButton
{
border-image: url(:/images/minimize.png);
background:transparent;
}
QPushButton:hover { background-color: rgb(25, 127, 204); }
3.2 主界面类
#ifndef MOVEABLEFRAMELESSWINDOW_H
#define MOVEABLEFRAMELESSWINDOW_H
#include <QObject>
#include <QWidget>
#include <QPoint>
/**
* @brief 无边框窗体
*/
class MoveableFramelessWindow : public QWidget
{
Q_OBJECT
public:
explicit MoveableFramelessWindow(QWidget *parent);
protected:
/**
* @brief 鼠标按下,准备拖动窗体
* @param event
*/
void mousePressEvent(QMouseEvent *event);
/**
* @brief 鼠标移动,处理窗体拖动
* @param event
*/
void mouseMoveEvent(QMouseEvent *event);
/**
* @brief 释放鼠标
* @param event
*/
void mouseReleaseEvent(QMouseEvent *event);
/**
* @brief 获取可拖动控件,必须由子类指定
* @return
*/
virtual QWidget*getDragnWidget()=0;
/**
* @brief 判断鼠标点击的位置是否进入可拖动区域
* @param widget 可拖动控件位置
* @param point 鼠标点击位置
* @return
*/
bool isPointInDragnWidget(const QWidget*widget,const QPoint &point);
/**
* @brief 标志是否移动窗体
*/
bool isMove;
/**
* @brief 鼠标按下去的点
*/
QPoint pressedPoint;
protected slots:
//主题改变
virtual void onThemeColorChange(QString colorStr){}
signals:
public slots:
};
#endif // MOVEABLEFRAMELESSWINDOW_H