无边框得窗口鼠标拖四边放大缩小

/*头文件*/

/*该部分代码,只是实现了拖放四边,放大缩小窗口,*/

class myWidget : public QWidget
{
    typedef enum
    {
        REPORT_SIDES_MARK_MIN = -1,
        REPORT_SDIES_MARK_TOP,
        REPORT_SDIES_MARK_LEFT,
        REPORT_SDIES_MARK_RIGHT,
        REPORT_SDIES_MARK_BOTTOM,
        REPORT_SDIES_MARK_MAX

    }REPORT_SIDES_MARK_ENUM;
    Q_OBJECT
public:
    myWidget(QWidget *parent = Q_NULLPTR);
    ~myWidget();

protected:
    void mouseMoveEvent(QMouseEvent *);
    void mousePressEvent(QMouseEvent *);
    void resizeEvent(QResizeEvent *);

private:
    REPORT_SIDES_MARK_ENUM  m_sidesMark;
};

 

/*实现部分代码*/

myWidget::myWidget(QWidget *parent)
    : QWidget(parent)
    , m_sidesMark(REPORT_SIDES_MARK_MIN)
{
    this->setMouseTracking(true);
    this->setFocusPolicy(Qt::StrongFocus);
    this->setStyleSheet("background-color:rgb(0,0,0)");
    this->setWindowFlags(Qt::FramelessWindowHint);
}

myWidget::~myWidget()
{

}

void myWidget::mouseMoveEvent(QMouseEvent *event)
{
    if (0 < event->pos().x() && event->pos().x() < 10)
    {
        this->setCursor(Qt::SizeHorCursor);
    }
    else if (0 < event->pos().y() && event->pos().y() < 10)
    {
        this->setCursor(Qt::SizeVerCursor);
    }
    else if (this->height() - 10 < event->pos().y() && event->pos().y() < this->height())
    {
        this->setCursor(Qt::SizeVerCursor);
    }
    else if (this->width() - 10 < event->pos().x() && event->pos().x() < this->width())
    {
        this->setCursor(Qt::SizeHorCursor);
    }
    else
    {
        this->setCursor(Qt::SizeAllCursor);
    }

    if (event->buttons() & Qt::LeftButton)
    {
        if (m_sidesMark == REPORT_SDIES_MARK_TOP)  /*顶*/
        {
            QRect rect = this->geometry();
            rect.setTop(this->mapToParent(event->pos()).y());
            this->setGeometry(rect);
        }
        else if (m_sidesMark == REPORT_SDIES_MARK_RIGHT)/*右*/
        {
            QRect rect = this->geometry();
            rect.setRight(this->mapToParent(event->pos()).x());
            this->setGeometry(rect);

        }
        else if (m_sidesMark == REPORT_SDIES_MARK_LEFT) /*左*/
        {
            QRect rect = this->geometry();
            rect.setLeft(this->mapToParent(event->pos()).x());
            this->setGeometry(rect);
        }
        else if (m_sidesMark == REPORT_SDIES_MARK_BOTTOM) /*底*/
        {
            QRect rect = this->geometry();
            rect.setBottom(this->mapToParent(event->pos()).y());
            this->setGeometry(rect);
        }
    }
    QWidget::mouseMoveEvent(event);
}

void myWidget::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        if (0 < event->pos().x() && event->pos().x() < 10) /*左*/
        {
            m_mouseLeftClick = true;
            m_sidesMark = REPORT_SDIES_MARK_LEFT;
        }
        else if (0 < event->pos().y() && event->pos().y() < 10) /*顶*/
        {
            m_mouseLeftClick = true;
            m_sidesMark = REPORT_SDIES_MARK_TOP;
        }
        else if (this->height() - 10 < event->pos().y() && event->pos().y() < this->height())  /*下*/
        {
            m_mouseLeftClick = true;
            m_sidesMark = REPORT_SDIES_MARK_BOTTOM;
        }
        else if (this->width() - 10 < event->pos().x() && event->pos().x() < this->width())  /*右*/
        {
            m_mouseLeftClick = true;
            m_sidesMark = REPORT_SDIES_MARK_RIGHT;
        }
    }

    QWidget::mousePressEvent(event);
}

void myWidget::resizeEvent(QResizeEvent *event)
{

    QWidget::resizeEvent(event);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pailugou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值