当前位置: 首页 > article >正文

C0003.用C++开发Qt界面,针对无边框界面,实现界面可任意拖动

具体实现代码如下:

namespace NaSpLink {
    // 新建一个类,来重写拖动事件函数
    class DragWidgetFilter : public QObject {
    public:
        DragWidgetFilter(QObject *parent)
            : QObject(parent) {
        }

        // 重写事件过滤函数
        bool eventFilter(QObject *object, QEvent *event) {
            // 通过dynamic_cast将窗口转换成QWidget类
            auto w = dynamic_cast<QWidget *>(object);
            // 如果转换失败
            if (!w) {
                return false;
            }

            // 如果转换成功了,并且事件类型是鼠标按下的事件
            if (event->type() == QEvent::MouseButtonPress) {
                // 将事件转换成QMouseEvent类型
                auto ev = dynamic_cast<QMouseEvent *>(event);
                // 如果转换失败
                if (!ev) {
                    return false;
                }

                // 否则,将鼠标点击的位置记录下来
                pos = ev->pos();
            }
            // 如果事件类型是鼠标移动的事件
            else if (event->type() == QEvent::MouseMove) {
                // 将事件转换成QMouseEvent类型
                auto ev = dynamic_cast<QMouseEvent *>(event);
                // 如果转换失败
                if (!ev)
                    return false;

                // 如果移动事件的按钮,并且是左键
                if (ev->buttons() & Qt::MouseButton::LeftButton) {
                    // 将窗口移动
                    w->move(ev->globalPos() - pos);
                }
            }
            // 返回交由父类进行处理
            return QObject::eventFilter(object, event);
        }

    private:
        // 记录鼠标位置
        QPoint pos;
    };
}

如上就可以实现鼠标点击无边框界面的任意位置,即可拖动界面。

**注意:**这个代码有一个问题,就是鼠标点击无边框界面上的控件时,也是会拖动的,但是这个会造成冲突,从而导致界面会抖动。

解决办法还未找到,哪位大佬都帮忙一同解决一直。


http://www.kler.cn/news/324076.html

相关文章:

  • 单片机配置IO口输出模式(IO口依然可以读取电平变化)
  • 函数内部的 arguments 变量特性,属性,如何将他转换为数组
  • AVL树(平衡二叉树)的介绍以及相关构建
  • Augular 学习步骤建议
  • 并查集 (Union-Find) :从基础到优化
  • C++学习笔记(35)
  • 数组的练习
  • 域 缺省参数 函数重载 引用
  • 828华为云征文|部署基于 LLM 的私有知识库系统 AnythingLLM
  • Magnific推V2图像生成服务 可直出4K图像
  • 发掘3D文件格式的无限潜力:打造沉浸式虚拟世界
  • 数据结构:树(并查集)
  • LeetCode[中等] 138. 随机链表的复制
  • 9.28学习
  • 人工智能的基本概念与发展历程
  • 【第十四章:Sentosa_DSML社区版-机器学习之时间序列】
  • 从碎片到整合:EasyCVR平台如何重塑城市感知系统的视频数据生态
  • 【matlab画多纵坐标图像】
  • io流(学习笔记04)io流的概述
  • 看Threejs好玩示例,学习创新与技术(Noise)
  • 饿了么 表单 回填后 无法更新 问题
  • Rider快捷键笔记
  • 计算机视觉方面的一些模块
  • Linux下如何实现不用加路径调用启动脚本
  • IP地址与智能家居能够碰撞出什么样的火花呢?
  • 【自动驾驶】对2D框的四条边同时缩进
  • [JavaEE] IP协议
  • 【韩顺平Java笔记】第2章:Java概述
  • Elasticsearch、ik分词器、elasticsearch-head、Kibana的认识与安装
  • mysql手册17_经验总结