工作项目中,利用到Qt对话框,场景需求:
1. 一部分窗体需要继承自QWidget
2. 一部分窗体需要继承自QDialog
3. 两者均需要去掉标题栏图标,同时能够自由拖动。
如果两者分开继承实现,会造成设置windowFlags、拖动功能部分代码重复冗余,为了达到代码复用的目的,利用模板类进行了封装。
本地使用效果正常,特此备录。
【1】头文件
#ifndef _UPC_DIALOG_BASE_H
#define _UPC_DIALOG_BASE_H
#include <QDialog>
#include <QWidget>
#include <QPoint>
#include <QMouseEvent>
template <typename T>
class UPCBaseWidget : public T
{
public:
UPCBaseWidget(QWidget *parent = Q_NULLPTR);
virtual ~UPCBaseWidget();
virtual int initialze() = 0;
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
private:
bool m_bMoving; // 移动标志
QPoint m_pointPosition; // 移动位置
};
/**
* @brief: 窗体基类。主要用于统一窗体风格和操作
* @author: Liuy
*/
class UPCComm