Qt中怎样把窗口类型设置成可用鼠标拖动改变大小???急!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt中怎样把窗口类型设置成可用鼠标拖动改变大小???急!!!相关的知识,希望对你有一定的参考价值。

参考技术A 继承自 QWidget

Qt设置窗口可拖动

实现逻辑

先来了解下面这个图,箭头表示鼠标,中间的方框表示窗口,最大的边框表示屏幕。

在移动窗口时,鼠标位于窗口的位置始终不变,也叫表示z向量是不变的。所以我们只需要计算出z向量
z = y - x;然后在鼠标移动时获取到鼠标相对于桌面左上角位置也就是y向量。即可计算出窗口左上角的位置:x = y - z;

具体代码

我们需要对鼠标移动、点击、释放事件进行重写。

    virtual void mouseMoveEvent(QMouseEvent *event);
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);

定义一个成员变量用来记录鼠标相对于窗口的位置。

QPoint z;

我们需要在鼠标按下时计算出鼠标相对于窗口的位置并保存,在鼠标移动时实时更新当前窗口的位置。

void Widget::mouseMoveEvent(QMouseEvent *event)

    QWidget::mouseMoveEvent(event);

    QPoint y = event->globalPos(); // 鼠标相对于桌面左上角位置
    QPoint x = y - this->z;

    this->move(x);


void Widget::mousePressEvent(QMouseEvent *event)

    QWidget::mousePressEvent(event);

    QPoint x = this->geometry().topLeft(); // 窗口左上角相对于桌面左上角位置
    QPoint y = event->globalPos(); // 鼠标相对于桌面左上角位置
    this->z = y - x; // 这是个定值



void Widget::mouseReleaseEvent(QMouseEvent *event)

    QWidget::mouseReleaseEvent(event);

    this->z = QPoint();

以上是关于Qt中怎样把窗口类型设置成可用鼠标拖动改变大小???急!!!的主要内容,如果未能解决你的问题,请参考以下文章

DataGrid 用鼠标拖动改变列宽,怎么做

qt里面怎么设置窗口大小改变不触发update

c# WINFORM窗体如何设置才可以不能随意拖动大小

VC中CDialogBox,停靠时,如何用鼠标拖动边框来改变大小

VC:如何实现窗口和窗口内容在鼠标拖动下改变大小

Qt自定义界面边框后,移动鼠标拖动界面,界面会拖到任务栏以下。。。如何解决?