0
点赞
收藏
分享

微信扫一扫

qt 无边框窗口拉伸,可能是全网最精简的代码

探头的新芽 2022-02-22 阅读 87

王婆卖瓜自卖自夸!废话少说,上代码,基于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

继续继续:

举报

相关推荐

0 条评论