logplus/Workflow/WFWidget/include/PaiWindow.h

232 lines
6.6 KiB
C
Raw Normal View History

2026-01-17 12:55:45 +08:00
/**
* @file PaiWindow.h
* @brief PAI系统风格默认窗体
* @date 2012-12-13
*/
#ifndef PAI_FRAME_WIDGET_PAIWINDOW_H
#define PAI_FRAME_WIDGET_PAIWINDOW_H
#include <QFrame>
#include <QRubberBand>
#include <QLayout>
#include <QMenu>
#include "PaiTitleBar.h"
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiWindow
* @brief PAI
*/
class PAI_WIDGET_EXPORT PaiWindow: public QFrame
{
Q_OBJECT
public:
/**
* @brief
* @param[in] parent
*/
PaiWindow(QWidget *parent = NULL);
/**
* @brief
*/
virtual ~PaiWindow();
/**
* @brief UI或控件可以放到里面
* @return
*/
QWidget* GetContainer();
/**
* @brief TitleBar的显示属性
* @param[in] flags titleBar的flags
*/
void SetTitleBarFlags(PaiTitleBar::TitleBarFlags flags);
/**
* @brief
* @param[in] visible
*/
void SetStatusBarVisible(bool visible);
/**
* @brief
* @param[in] visible
*/
void SetTitleBarVisible(bool visible);
/**
* @brief Layout到当前对话框
* @note Container的Layout
* @param[in] pLayout layout manager
*/
void setLayout(QLayout *pLayout);
/**
* @brief layout
* @note Container的layout
* @return layout
*/
QLayout* layout() const;
/**
* @brief statusBar的指针
* @return statusBar的指针
*/
QStatusBar* statusBar();
/**
* @brief systemMenu的指针
* @return systemMenu的指针
*/
QMenu* systemMenu();
/**
* @brief settingMenu的指针
* @return settingMenu的指针
*/
QMenu* settingMenu();
/**
* @brief title bar的menu
*/
void updateMenu();
/**
* @brief TitleBar上Logo和系统菜单中间的区域插入Widget
* @param[in] pWidget Widgt
* @param[in] alignment Qt::AlignLeft和Qt::AlignRight
*/
void InsertTitleBarWidget(QWidget *pWidget, Qt::Alignment alignment);
/**
* @brief window的Geometry
* @note ,window是否是最大化
* @param[in] x
* @param[in] y
* @param[in] w
* @param[in] h
*/
void setGeometry(int x, int y, int w, int h);
/**
* @brief window的Geometry
* @note ,window是否是最大化
* @param[in] rect
*/
void setGeometry(const QRect &rect);
/**
* @brief window的WindowStates
* @note
* @param[in] state Qt::WindowStates
*/
void setWindowState(Qt::WindowStates state);
/**
* @brief
* @param[in] mode 0:;1:
*/
static void SetWindowChangeSizeMode(int mode);
public slots:
/**
* @brief window的title
* @note titlebar
* @param[in] windowTitle dialog的title
*/
void setWindowTitle(const QString & windowTitle);
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 closeEvent(QCloseEvent *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] mousePosion
*/
void setCursorShape(const QPoint & mousePosion);
/**
* @brief Resize事件的实现
* @param[in] mousePosion
*/
void resizeFrame(const QPoint & mousePosion);
private:
ResizeDirction m_ResizeDirction; ///< 拖动的方向变量
bool m_IsPress; ///< 鼠标是否按下
bool m_IsMoved; ///< 鼠标是否拖动
QRubberBand *m_pRubberBand; ///< 窗口大小改变时显示的边框
pai::gui::PaiTitleBar *m_pTitleBar; ///< 自定义的titleBar
pai::gui::PaiStatusBar *m_pStatusBar; ///< 自定义的statusBar
QMenu *m_pSystemMenu; ///< 自定义的systemMenu
QMenu *m_pSettingMenu; ///< 自定义的settingMenu
QWidget *m_pContainerWidget; ///< 容器指针
int m_TimerID; ///< 定时器ID
static int m_WinChangeSizeMode; ///< 鼠标改变窗体大小方式: 0:鼠标左键弹起后窗体变动;1:鼠标左键按下拖动时,窗体显示实时变动;
static bool m_IsInitWinChangeSizeMode; ///< 因为当前配置保存在配置文件中,暂时添加此变量表示是否初始化加载配置文件
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAIWINDOW_H