PowerModeler/include/customBorderContainer.h

97 lines
2.5 KiB
C
Raw Normal View History

/**
*\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