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
|