【Qt】Qt无边框窗口(鼠标点击自定义标题栏)可拖动

这篇具有很好参考价值的文章主要介绍了【Qt】Qt无边框窗口(鼠标点击自定义标题栏)可拖动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

隐藏掉标题栏后,默认情况下窗口无法被鼠标拖动的,需要自己处理鼠标事件,移动窗口达到拖动效果,但是又不想要鼠标点击整个窗口都可以拖动,只需要鼠标点击自定义的标题栏时可拖动

具体步骤如下:

1.定义一个坐标用来接收鼠标当前位置

static QPoint last;

类外初始化

QPoint Logwin::last(0,0);

2.设定标题栏高度

qt无边框窗口拖动,QT学习之路,qt,开发语言,c++

#define TITLE_HEIGHT 50

3.实现鼠标按压、移动、释放三个事件

qt无边框窗口拖动,QT学习之路,qt,开发语言,c++

通过鼠标点击事件,判断鼠标是否在标题栏,如果是,则获取当前位置;

鼠标移动事件实时改变窗口位置

qt无边框窗口拖动,QT学习之路,qt,开发语言,c++

 具体代码

//头文件
    static QPoint last;
    //鼠标按下
    void mousePressEvent(QMouseEvent* event);
    //鼠标移动
    void mouseMoveEvent(QMouseEvent* event);
    //鼠标释放
    void mouseReleaseEvent(QMouseEvent* event);

//源文件
#define TITLE_HEIGHT 50


QPoint Logwin::last(0,0);
void Logwin::mousePressEvent(QMouseEvent *event)//判断鼠标点击时是否小于标题栏高度
{
    if(event->y()<TITLE_HEIGHT)
    {
        last = event->globalPos();//获取坐标
    }
}

void Logwin::mouseMoveEvent(QMouseEvent *event)//鼠标移动,实时修改窗口的坐标
{
    if(event->y()<TITLE_HEIGHT)
    {
        int dx = event->globalX() - last.x();
        int dy = event->globalY() - last.y();
        last = event->globalPos();
        this->move(this->x()+dx,this->y()+dy);
    }
}

void Logwin::mouseReleaseEvent(QMouseEvent *event)//鼠标释放
{
    if(event->y()<TITLE_HEIGHT)
    {
        int dx = event->globalX() - last.x();
        int dy = event->globalY() - last.y();
        this->move(this->x()+dx,this->y()+dy);
    }
}

这样就可以实现只对标题栏进行拖动的操作了

感谢观看!!!!

以上就是全部内容,如果对您有帮助,欢迎点赞评论,或者发现有哪里写错的,欢迎指正!文章来源地址https://www.toymoban.com/news/detail-519017.html

到了这里,关于【Qt】Qt无边框窗口(鼠标点击自定义标题栏)可拖动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt隐藏标题栏,鼠标实现窗口右下角放缩窗口

    重写鼠标移动事件就可以了,如果想实现其它位置的缩放,可以自己根据鼠标的位置来实现,思路都是一样的

    2024年02月13日
    浏览(50)
  • QT`实现鼠标超时未点击,窗口自动关闭

    QT 实现鼠标超时未点击,窗口自动关闭 前言 有的时候我们需要某些窗口实现超时自动关闭,但是Qt窗口一般是多部件堆叠而成,如果常规处理,对每一个部件进行鼠标点击事件处理显然不太合理,我个人参考了网上前辈的处理方法,通过直接重新实现 QApplication::notify 函数来

    2024年02月10日
    浏览(44)
  • QT自绘标题和边框

    1) 在创建窗口前设置Qt::FramelessWindowHint标志,设置该标志后会创建一个无标题、无边框的窗口。 2)在客户区域的顶部创建一个自绘标题栏。 3)给窗口绘制一个背景作为边框。 4)如果想要鼠标拖动效果,可以在WM_NCHITTEST消息中返回HTCAPTION,具体方法百度这里不再详述。 但

    2024年02月03日
    浏览(34)
  • Qt 窗口阴影边框

    环境:Qt 5.15 + VS2019 实现方法参考链接:https://blog.csdn.net/goforwardtostep/article/details/99549750 使用此方法添加窗口阴影,会出现警告信息: 且窗口最大化与还原切换时会出现子控件刷新问题: 实现方法参考链接:https://blog.csdn.net/goforwardtostep/article/details/99549750 需要美工 实现方法

    2024年01月24日
    浏览(29)
  • QT窗口实现无边框

    在窗口的构造函数内添加

    2024年02月06日
    浏览(36)
  • FramelessWindow实现qt无边框窗口

    FramelessWindow.h文件链接 添加FramelessWindow.h头文件 在你的qt项目中将FramelessWindow.h头文件导入进来,或者使用cmake、qmake将包含该头文件的目录引入。 简单浏览framelessWindow代码 我们发现FramelessWindow是一个继承模板参数的类模板。 并且看一下构造函数 简单实现 1.继承该类模板,如

    2024年02月02日
    浏览(34)
  • Qt C++ 实现无边框窗口

    2024年04月17日
    浏览(30)
  • Qt滑动条解决点击和拖动问题

    QSlider 在点击非滑块部分时,不会直接到点击位置,而是一步一步执行,在项目中使用时会感觉不流畅。可以通过改变QSlider的鼠标点击事件(mousePressEvent)和鼠标移动事件(mouseMoveEvent)解决。 使用原QSlider 如UI中使用verticalSlider,MySliderUI.h 头文件: MySliderUI.cpp 添加事件过滤

    2024年02月15日
    浏览(23)
  • Qt鼠标拖动控件交换布局位置

    方法很简单,交换鼠标起点控件指针和鼠标落点控件指针的值,然后重新布局 Qt鼠标拖动控件交换布局位置 源文件 头文件 下面是只交换控件显示的内容: 添加鼠标贴图,跟随鼠标移动: 一种实现:重写void paintEvent(QPaintEvent *event);方法 另一种实现:

    2024年02月11日
    浏览(37)
  • Qt:界面实时响应鼠标拖动绘制

    采用双缓冲实现界面实时响应鼠标的拖动绘制。 思想如下:首先需要两张画布pix和tempPix,他们都是QPixmap实例;pix用来保存初始界面或上一阶段以完成的绘制;tempPix用来作为鼠标拖动时的实时界面绘制;当鼠标左键按下后拖动时每次都将将pix赋值给tempPix,然后用tempPix进行绘

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包