王婆卖瓜自卖自夸!废话少说,上代码,基于QMainWindow:
H:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QRubberBand>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
#define DEFAULT_CURSOR Qt::ArrowCursor
class MainWindow : public QMainWindow
{
Q_OBJECT
Q_PROPERTY(int m_borderWidth READ borderWidth WRITE setBorderWidth)
Q_PROPERTY(bool m_dragEnable READ dragEnable WRITE setDragEnable)
Q_PROPERTY(bool m_bottomRightResizeEnable READ bottomRightResizeEnable WRITE setBottomRightResizeEnable)
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
enum Edge {
None = 0x0,
Left = 0x1,
Top = 0x2,
Right = 0x4,
Bottom = 0x8,
TopLeft = Top|Left,
TopRight = Top|Right,
BottomLeft = Bottom|Left,
BottomRight = Bottom|Right,
};
Q_DECLARE_FLAGS(Edges, Edge)
protected:
bool eventFilter(QObject *o, QEvent *e) override;
void leaveEvent(QEvent *event);
void mousePressEvent(QMouseEvent*e);
void hoverMoveEvent(QHoverEvent*);
void mouseReleaseEvent(QMouseEvent*);
private:
Qt::CursorShape calculateCursorPosition(const QPoint &, const QRect &, Edges &);
void setBorderWidth(int w) {m_borderWidth = w;}
int borderWidth() const {return m_borderWidth;}
void setDragEnable(bool w) {m_dragEnable = w;}
bool dragEnable() const {return m_dragEnable;}
void setBottomRightResizeEnable(bool w) {m_bottomRightResizeEnable = w;}
bool bottomRightResizeEnable() const {return m_bottomRightResizeEnable;}
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
private:
Ui::MainWindow *ui;
QRect m_startRect;
bool m_leftButtonPressed;
Edges m_edgeOnMousePress = Edge::None;
int m_borderWidth = 6;
QPoint m_dragPos;
bool m_dragStart = false,m_dragEnable = true;
bool m_bottomRightResizeEnable = true;
};
#endif // MAINWINDOW_H
继续继续: