PowerModeler/include/customBorderContainer.h

97 lines
2.5 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.

/**
*\brief 自定义边框容器类可以挂载给任意采用无系统边框的widget上进而实现widget的缩放、移动等功能
*
*\author dsc
*/
#ifndef CUSTOMBORDERCONTAINER_H
#define CUSTOMBORDERCONTAINER_H
#include <QWidget>
#include <QObject>
#include <QLabel>
#include <QMouseEvent>
#include <QBasicTimer>
class CustomBorderContainer : public QObject
{
Q_OBJECT
public:
enum borderType
{
border_left = 0,
border_right,
border_top,
border_bottom,
border_leftTop,
border_leftBottom,
border_rightTop,
border_rightBottom,
border_move
};
enum OperationOption
{
NoOperation = 0, // 二进制: 0b0000
Movable = 1 << 0, // 二进制: 0b0001
Resizable = 1 << 1, // 二进制: 0b0010
DefaultOperation = Movable | Resizable
};
//创建 QFlags 包装类型
Q_DECLARE_FLAGS(OperationOptions, OperationOption)
explicit CustomBorderContainer(QWidget* parent, QSize minimumSize = QSize(50, 50), int borderSize = 3);
~CustomBorderContainer();
void setMinimumWindowSize(QSize);
void setBorderSize(int);
void setOperationOptions(OperationOptions);
void updateBorder();
void updateContentWidget();
private:
//内部类
class Border : public QLabel
{
public:
explicit Border(QWidget* parent, borderType type, CustomBorderContainer* container);
protected:
void mousePressEvent(QMouseEvent*);
void mouseMoveEvent(QMouseEvent*);
void mouseReleaseEvent(QMouseEvent*);
void timerEvent(QTimerEvent*);
private:
borderType m_type;
QPoint m_mouseLastPoint;
QPoint m_mouseMoveLength;
bool m_mouseIsPressed;
CustomBorderContainer* m_contaniner;
QBasicTimer m_repaintTimer;
};
void initializeBorder();
void scaleByCustomBorder(borderType, const QPoint&);
QWidget* m_contentWidget;
QSize m_minimumSize;
int m_borderSize;
//borders
Border* m_borderLeft;
Border* m_borderRight;
Border* m_borderTop;
Border* m_borderBottom;
Border* m_borderLeftTop;
Border* m_borderLeftBottom;
Border* m_borderRightTop;
Border* m_borderRightBottom;
Border* m_borderMove; //用于移动的border
OperationOptions m_operationOptions;
};
//生成运算符重载(不能放在类的内部)
Q_DECLARE_OPERATORS_FOR_FLAGS(CustomBorderContainer::OperationOptions)
#endif //CUSTOMBORDERCONTAINER_H