logplus/Workflow/WFWidget/include/PaiDialog.h
2026-01-17 12:55:45 +08:00

206 lines
6.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file PaiDialog.h
* @brief PAI系统默认对话框
* @date 2011-10-17
*/
#ifndef PAI_FRAME_WIDGET_PAIDIALOG_H
#define PAI_FRAME_WIDGET_PAIDIALOG_H
#include <QDialog>
#include <QLayout>
#include <QRubberBand>
#include "PaiTitleBar.h"
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiDialog
* @brief PAI系统默认对话框
*/
class PAI_WIDGET_EXPORT PaiDialog: public QDialog
{
Q_OBJECT
public:
/**
* @brief 构造函数
* @param[in] pParent 父窗口句柄
* @param[in] flags 窗口类型
*/
PaiDialog(QWidget *pParent = NULL, Qt::WindowFlags flags = 0);
/**
* @brief 析构函数
*/
virtual ~PaiDialog();
/**
* @brief 获得控件容器UI或控件可以放到里面
* @return 控件容器
*/
QWidget* GetContainer();
/**
* @brief 设置TitleBar的显示属性
* @param[in] flags titleBar的flags
*/
void SetTitleBarFlags(PaiTitleBar::TitleBarFlags flags);
/**
* @brief 返回TitleBarFlags
* @return 对话框标志
*/
PaiTitleBar::TitleBarFlags GetTitleBarFlags() const;
/**
* @brief 设置dialog的title,覆盖基类函数会将其设置到titlebar
* @param[in] windowTitle dialog的title
*/
void setWindowTitle(const QString & windowTitle);
/**
* @brief 设置Layout到当前对话框,覆盖基类函数会设为Container的Layout
* @param[in] pLayout layout manager
*/
void setLayout(QLayout *pLayout);
/**
* @brief 获得当前对话框的layout,覆盖基类函数实际返回的时Contgainer的layout
* @return 布局
*/
QLayout* layout() const;
/**
* @brief 在TitleBar上Logo和系统菜单中间的区域插入Widget
* @param[in] pWidget 要插入的Widgt
* @param[in] alignment 在哪一侧接受Qt::AlignLeft和Qt::AlignRight
*/
void InsertTitleBarWidget(QWidget *pWidget, Qt::Alignment alignment);
/**
* @brief 设置是否运输用鼠标改变窗口大小
* @param[in] constraint 是否固定大小
*/
void SetConstraintSize(bool constraint);
/**
* @brief 设置window的Geometry,覆盖基类函数,用来判断window是否是最大化
* @param[in] x x轴坐标
* @param[in] y y轴坐标
* @param[in] with 宽度
* @param[in] height 高度
*/
void setGeometry(int x, int y, int with, int height);
/**
* @brief 设置window的Geometry,覆盖基类函数,用来判断window是否是最大化
* @param[in] rect 矩形区域
*/
void setGeometry(const QRect & rect);
/**
* @brief 设置鼠标改变窗体大小显示方式
* @param[in] mode 0:松开鼠标后窗体变动;1:鼠标左键按下拖动时,窗体大小实时变动;
*/
static void SetWindowChangeSizeMode(int mode);
public slots:
/**
* @brief 当在有最小化按钮时,需要调整对话框出现的位置
*/
void show();
/**
* @brief 当在有最小化按钮时,需要调整对话框出现的位置
* @return 对话框出现的位置
*/
int exec();
protected:
/**
* @brief 重写鼠标点击事件
* @param[in] pEvent 鼠标按压事件
*/
virtual void mousePressEvent(QMouseEvent *pEvent);
/**
* @brief 重写鼠标释放事件
* @param[in] pEvent 鼠标释放事件
*/
virtual void mouseReleaseEvent(QMouseEvent *pEvent);
/**
* @brief 重写鼠标移动事件
* @param[in] pEvent 鼠标移动事件
*/
virtual void mouseMoveEvent(QMouseEvent *pEvent);
/**
* @brief 一旦鼠标样式更改没隔100毫秒判断一次鼠标位置以便更改鼠标样式
* @param[in] pEvent 定时器事件
*/
virtual void timerEvent(QTimerEvent *pEvent);
/**
* @brief 用来绘制边框
* @param[in] pEvent 绘制事件
*/
virtual void paintEvent(QPaintEvent *pEvent);
private:
/**
* @enum ResizeDirction
* @brief Resize事件中拖动的方向
*/
enum ResizeDirction
{
ResizeDirction_None = 0, ///< 无方向
ResizeDirction_Top = 1, ///< 向上
ResizeDirction_Bottom = 2, ///< 向下
ResizeDirction_Left = 3, ///< 向左
ResizeDirction_Right = 4, ///< 向右
ResizeDirction_TopLeft = 5, ///< 左上
ResizeDirction_TopRight = 6, ///< 右上
ResizeDirction_BottomLeft = 7, ///< 左下
ResizeDirction_BottomRight = 8 ///< 右下
};
/**
* @brief 触发Resize事件之前用来更新鼠标样式
* @param[in] mousePosition 当前鼠标所在的坐标
*/
void SetCursorShape(const QPoint & mousePosition);
/**
* @brief Resize事件的实现
* @param[in] mousePosition 当前鼠标所移动的位置
*/
void ResizeFrame(const QPoint & mousePosition);
private:
pai::gui::PaiTitleBar *m_pTitleBar; ///< 标题栏
QWidget *m_pContainer; ///< 容器指针
ResizeDirction m_ResizeDirction; ///< 方向
bool m_IsPress; ///< 按压标志
bool m_moved; ///< 窗口大小是否拖动
QRubberBand *m_pRubberBand; ///< 橡皮筋
int m_TimerID; ///< 定时器id
bool m_ConstSize; ///< 因为在设置固定大小后,无法最小化,这里特殊控制一下
static int m_WinChangeSizeMode; ///< 鼠标改变窗体大小方式: 0:鼠标左键弹起后窗体变动;1:鼠标左键按下拖动时,窗体显示实时变动;
static bool m_InitWinChangeSizeMode; ///< 因为当前配置保存在配置文件中,暂时添加此变量表示是否初始化加载配置文件
signals:
/**
* @brief 关闭按钮按下后释放次信号,如果需要在对话框关闭前处理事务,则可直联次信号。
*/
void CloseButtonClicked();
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAIDIALOG_H