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

202 lines
4.8 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 PaiTitleBar.h
* @brief 自定义的标题栏
* @date 2012-11-29
*/
#ifndef PAI_FRAME_WIDGET_PAITITLEBAR_H
#define PAI_FRAME_WIDGET_PAITITLEBAR_H
#include <QStatusBar>
#include <QWidget>
#include "Turtle.h"
namespace pai
{
namespace gui
{
class PaiToolButton;
}
}
class QMenu;
class QHBoxLayout;
namespace pai
{
namespace gui
{
/**
* @class PaiStatusBar
* @brief PAI 系统默认风格状态栏
*/
class PAI_WIDGET_EXPORT PaiStatusBar: public QStatusBar
{
public:
/**
* @brief 构造函数
* @param[in] pParent 父窗口句柄
*/
PaiStatusBar(QWidget *pParent = NULL);
/**
* @brief 析构函数
*/
virtual ~PaiStatusBar();
};
/**
* @class PaiTitleBar
* @brief PAI 系统标准标题栏
*/
class PAI_WIDGET_EXPORT PaiTitleBar: public QWidget
{
Q_OBJECT
Q_FLAGS(TitleBarFlags)
public:
/**
* @enum TitleBarFlag
* @brief Title Bar 所可选的部分功能
*/
enum TitleBarFlag
{
CloseButtonHint = 0x01, ///< 关闭按钮可视化标志
MaximumButtonHint = 0x02, ///< 最大化按钮可视化标志
MinimumButtonHint = 0x04, ///< 最小化按钮可视化标志
LogoButtonHint = 0x08 ///< logo按钮可视化标志
};
Q_DECLARE_FLAGS(TitleBarFlags, TitleBarFlag)
/**
* @brief 构造函数
* @param[in] pParent 父窗口句柄
*/
PaiTitleBar(QWidget *pParent = NULL);
/**
* @brief 析构函数
*/
virtual ~PaiTitleBar();
/**
* @brief 修改titleBar的title
* @param[in] title 新的title
*/
void SetTitle(const QString & title);
/**
* @brief 设置titleBar的flag可以设置所有button的隐藏
* @param[in] flags titleBar的flags
*/
void SetTitleBarFlags(TitleBarFlags flags);
/**
* @brief 返回TitleBarFlags
* @return 标题栏标记
*/
PaiTitleBar::TitleBarFlags GetTitleBarFlags() const;
/**
* @brief 创建system menu
* @param[in] pMenu 菜单
*/
void CreateSystemMenu(QMenu *pMenu);
/**
* @brief 在Logo和系统菜单中间的区域插入Widget
* @param[in] pWidget 要插入的Widgt
* @param[in] alignment 在哪一侧接受Qt::AlignLeft和Qt::AlignRight
*/
void InsertWidget(QWidget *pWidget, Qt::Alignment alignment);
/**
* @brief 修改restore图标状态
* @param[in] maximized 设这成恢复最大的图标
*/
void ChangeRestoreButtonState(bool maximized);
protected:
/**
* @brief 重写paint事件
* @param[in] pEvent 事件对象
*/
virtual void paintEvent(QPaintEvent *pEvent);
/**
* @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 重写鼠标双击事件
* @param[in] pEvent 事件对象
*/
virtual void mouseDoubleClickEvent(QMouseEvent *pEvent);
/**
* @brief 重写resize事件
* @param[in] pEvent 事件对象
*/
virtual void resizeEvent(QResizeEvent *pEvent);
protected slots:
/**
* @brief 修改restore图标状态
*/
void ChangeRestoreButtonState();
private:
/**
* @brief 根据titlebar的宽幅和m_iTitleNameCenterStand进行比较,返回titlebar标题文字显示区域
* @param[in] pixelTitle 标题
* @return 返回titlebar标题文字显示区域
*/
QRect GetTitleNameRect(int pixelTitle);
private:
QPoint m_MovePosition; ///< 鼠标点击的坐标用于拖动titleBar所在的mainFrame
QString m_title; ///< 显示的title
PaiToolButton *m_pExitButton; ///< 退出按钮
PaiToolButton *m_pMaximumButton; ///< 最大按钮
PaiToolButton *m_pMinimumButton; ///< 最小按钮
PaiToolButton *m_pLogoButton; ///< Logo按钮
QHBoxLayout *m_pRightHLayout; ///< 为了方便向右侧插入窗体
QHBoxLayout *m_pLeftHLayout; ///< 为了方便向左侧插入窗体
TitleBarFlags m_titleBarFlags; //< 标题按钮是否显示的flag
signals:
/**
* @brief Exit按钮被点击的时候发出此信号
*/
void HandleExitButton();
/**
* @brief Minimum按钮被点击的时候发出此信号
*/
void HandleMinimumButton();
/**
* @brief Maximum按钮被点击的时候发出此信号
*/
void HandleMaximumButton();
};
}
}
Q_DECLARE_OPERATORS_FOR_FLAGS(pai::gui::PaiTitleBar::TitleBarFlags) ///< 此句必须放在命名控件之外
#endif ///< PAI_FRAME_WIDGET_PAITITLEBAR_H