202 lines
4.8 KiB
C++
202 lines
4.8 KiB
C++
/*
|
||
* @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
|