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