logplus/Workflow/WFWidget/include/PaiTitleBar.h

202 lines
4.8 KiB
C
Raw Normal View History

2026-01-17 12:55:45 +08:00
/*
* @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的flagbutton的隐藏
* @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