Qt实现窗口整体拖拽功能.

2023-10-31

我们都知道,当我们鼠标点击并移动应用程序的上边框时,窗口才会整体移动,但有些窗口,你点击移动其他部分,也可以让窗口跟着鼠标移动,这里就教你如何整体移动窗口.

其实实现这样的功能很简单,只需要重写以下的3个鼠标函数即可.

//"c.h"
#ifndef C_H
#define C_H

#include <QtWidgets/QWidget>
#include "ui_c.h"
#include <QMouseEvent>

class c : public QWidget
{
    Q_OBJECT

public:
    c(QWidget *parent = 0);
    ~c();

protected:
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
private:
    Ui::cClass ui;
    bool m_move;
    QPoint m_startPoint;
    QPoint m_windowPoint;
};

#endif // C_H
//"c.cpp"
#include "c.h"

c::c(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //给是否移动的标志初始化为false.
    m_move = false;
}

c::~c()
{

}
void c::mousePressEvent(QMouseEvent *event)
{
    //当鼠标左键点击时.
    if (event->button() == Qt::LeftButton)
    {
        m_move = true;
        //记录鼠标的世界坐标.
        m_startPoint = event->globalPos();
        //记录窗体的世界坐标.
        m_windowPoint = this->frameGeometry().topLeft();
    }
}
void c::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton)
    {
        //移动中的鼠标位置相对于初始位置的相对位置.
        QPoint relativePos = event->globalPos() - m_startPoint;
        //然后移动窗体即可.
        this->move(m_windowPoint + relativePos );
    }
}
void c::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton)
    {
        //改变移动状态.
        m_move = false;
    }
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt实现窗口整体拖拽功能. 的相关文章

  • QAbstractItemModel 如何表示树?

    我仍然很难理解 QAbstractItemModel 对项目的表示 有两种返回 QModelIndex 项的方法对我来说没有任何意义 QModelIndex QAbstractItemModel index int row int colu
  • 如何将 QFile 与 std::iostream 一起使用?

    是否可以像 std iostream 一样使用 QFile 我很确定那里一定有一个包装纸 问题是在哪里 我有另一个库 它需要 std istream 作为输入参数 但在我的程序中 此时我只有一个 QFile 我使用以下代码提出了自己的解决方
  • 是否可以根据 QSlider 的位置来改变其手柄的颜色?

    我非常清楚如何通过样式表自定义 QSlider 但我想知道是否可以执行以下操作 我希望滑块的手柄从蓝色变为黄色 当设置在左侧时 它是蓝色的 设置在左侧时 它是蓝色的 当你将它向右移动时 它会出现从蓝色到黄色的渐变 如果可以通过样式表 如何实
  • QFileDialog::getOpenFileName 调试时崩溃,显然是由项目名称引起的?

    我遇到了一个让我非常困惑的问题 我在 Windows 7 上使用 Qt Creator 3 1 2 和 Qt 5 3 使用 MSVC 10 0 编译器和 Windows 8 1 调试工具中的 CDB 不确定我是否应该寻找特定于 Window
  • 使用 QGraphicsScene 和 QGraphicsView 在 Qt 中开始基于 Tile 的游戏

    我将开始在 Qt 中编写基于 2D 图块的游戏 并阅读 QGraphicsScene 和 QGraphicsView 类 这些类旨在显示和处理大量 2D 对象 我的问题是 使用 QGraphicsScene 创建一个包含大量图块的世界是否可
  • 如何为 Windows 安装开源 Qt 库 5 二进制版本

    这个问题具体是关于Qt libraries 5 0 0 for Windows VS 2010 406 MB at http qt project org downloads http qt project org downloads 但我
  • QT:模块“QtWebView”未安装

    我的操作系统是win10 QT版本是Qt5 7 mingw53 32 目标操作系统是win10 当我使用qmlscene执行qml文件时 发生了一些错误 qrc qml 3 模块 QtWebView 未安装 我的 qml 文件如下 impo
  • Qt 5.3 QPlainTextEdit 更改 QTextCursor 颜色

    我想更改下面的光标颜色QPlainTextEdit小部件 我能够将其宽度设置为6 但我想改变颜色或者它 是否可以 QFontMetrics fm font setCursorWidth fm averageCharWidth setCurs
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 如何在不声明 32 个插槽的情况下将 32 个按钮的 pressed() 信号连接到单个函数?

    我有一个小部件 里面有 32 个按钮 我需要将每个按钮的 Pressed 信号连接到一个插槽 以便调用一个函数 该函数的参数取决于我按下的按钮 现在我通过以 on QPushButtonName pressed 的形式添加 32 个插槽来做
  • 当选项卡到另一个组件位置时,QML 中相应的滚动

    我想做的是 如果我从TextField到另一个组件 aComboBoxwtv 我希望滚动能够适应这一点 当我认为这非常重要时 当我执行连续选项卡时 我会转到滚动视图显示的内容下方的控件 一个例子是 假设我在这里 now i do 2 tab
  • 从 QFile 获取句柄

    我有一个QFile 但我需要在其上调用一些仅接受HANDLE 有没有办法找回底层HANDLE of the QFile 我找到了一种使用的方法 get osfhandle 在 MinGW 和 VS 中可用 QFile file HANDLE
  • 如何为QTableView中的当前项目设置样式表

    When QTableView编辑控件对于发生编辑的当前项目可见 当窗口中没有活动的编辑控件时QTableView当前项目的样式使用QTableView selection background color 如何只为当前项目设置不同的样式
  • Qt:使用 QObject::connect 指定多种连接类型

    我想知道是否可以指定多种连接类型 例如 我希望我的连接类型是排队连接和唯一连接 是否可以在一份声明中具体说明这一点 QObject connect ptrSender SIGNAL ptrReceiver SLOT Queued and u
  • QImage 转换为 QML

    我的应用程序通过网络接收 JPEG 实时流 每秒 16 帧 直播流应使用 QML 显示 接收部分是用C 编写的 所有UI都是用QML编写的 如何将图像数据输入 QML 窗口 我已经研究过如何显示 QImage 但还没有找到解决方案 实现 Q
  • 从 QTableView 读取和写入文件

    如何读取和写入输入 QTableView 的文本文件日期 这就是我所拥有的 但我想在将数据添加到表中时保存数据 当然能够在重新打开应用程序时读回它 有什么教程可以参考吗 MainWindow MainWindow QWidget paren
  • QNetworkAccessManager 的替代方案

    我正在BB10中绘制地图 地图被划分为图块 开始时 用户给出经度 纬度和缩放级别 地图将显示在该坐标处 我通过使用 QNetworkAccessManager 执行 http 请求来获得单个图块 首先下载 7x5 块 但问题是 当用户开始在
  • 用Qt制作无边框窗口

    我是 Qt C 新手 我下载了最新的 Windows 版本 做了一些教程 非常棒 我看到了 Qt 框架具有的一些样式选项 而且它很棒 但现在我需要构建我的应用程序 其主窗口 形式 是用没有矩形边框 无边框 的图像设计 蒙皮的 我怎样才能用Q
  • QTextEdit:仅当滚动条位于底部时自动向下滚动

    有一个 QTextEdit 显示相当多的文本 它不可编辑 假设我想在开头阅读一些内容 向上滚动 但随后添加了一个新行 并且滚动条自动转到底部 我在使用各种程序时遇到类似的问题 无论它们是用什么语言编写的 如何处理这个问题 当向文本添加新行时
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt

随机推荐

  • GCC安全编译选项

    转载自 http www jackieathome net archives 796 html 前言 今天在学习编译器堆栈保护技术时 突然发现gcc的安全编译选项我还从来没去了解过 发现一篇写的不错的帖子 进行转载保存 以CMake为例 给
  • 家里旧电脑改造媒体中心打造最强播放器geexbox 转载

    Geexbox是什么 Geexbox其实是个集成了mplayer的Mini Linux系统 支持大部分媒体文件编码 包括divx xvid RM RMVB MPEG 4 wmv MP3等 也能播放常见图像文件 如果联网 在线视频照样可以看
  • css3-pointer-events_demo

    该demo定义了一个菜单 点击了一次之后就不能再点击 另外其中也用到了flex布局 可直接将代码复制运行即可
  • 小程序跳转小程序

    小程序跳转另一个小程序 js如下 tzxcx function wx navigateToMiniProgram appId wxde8ac0a21135c07d 要打开的小程序 appId path 打开的页面路径 如果为空则打开首页 e
  • linux:ubuntu 22.04如何更换阿里源

    参考 https www cnblogs com liujiaxin2018 p 16373668 html 说明 为什么要换阿里源 因为原先系统自带的源地址无法访问 墙的原因 所以必须换成国内的源 附带可能遇到问题的处理 Ubuntu中
  • 阿里云OSS存储

    目录 一 阿里云OSS存储 二 SDK了解 三 Spring Boot集成OSS 一 阿里云OSS存储 对象存储OSS 为了解决海量数据存储与弹性扩容 我们采用云存储的解决方案 1 开通对象存储OSS服务 1 申请阿里云账号 2 实名认证
  • 自我理解:封装、继承和多态

    一 封装 1 概念 封装就是隐藏对象的属性和实现细节 只对外公开一些操作内部属性的方法 接口 函数 2 目的 增强安全性 简化编程 使用者不必了解具体的实现细节 只需要通过外部接口 就可以对类的内部成员进行操作 class A public
  • avalonJS-源码阅读(三) VMODEL

    2019独角兽企业重金招聘Python工程师标准 gt gt gt avalon dom小结 看过前面三篇文章后 应该会对avalon关于dom的处理有个大体的理念 这里再理一遍 avalon通过手动触发scan函数来遍历dom 然后根据m
  • mybatis学习记录(四)-----MyBatis核心配置文件详解

    目录 MyBatis核心配置文件详解 4 1 environment 4 2 transactionManager 4 3 dataSource 4 4 properties 4 5 mapper MyBatis核心配置文件详解 mybat
  • PLC常用的通信协议有哪些?如何进行协议解析和远程上下载?

    PLC有西门子 三菱 欧姆龙 施耐德 罗克韦尔等国外品牌 也有台达 汇川 信捷等国内品牌 具备不同的协议 给企业的设备通信和远程监控带来困扰 因此 很多企业在选择工业网关都会考虑兼容协议解析功能 以便实现在更多的场景得到应用 提高生产效率降
  • 计算机课代表专业演讲稿,信息课代表演讲稿

    信息课代表演讲稿 由会员分享 可在线阅读 更多相关 信息课代表演讲稿 2页珍藏版 请在人人文库网上搜索 1 信息课代表演讲稿今天 很荣幸走上讲台 和那么多乐意为班级作贡献的同学一道 竞选班委 我为此竞选的是信息课代表 我想 我将用旺盛的精力
  • C++学习 类的分文件实现

    mian cpp测试文件 include
  • 【数据库】NoSQL数据库简介

    基于自己的理解 对几个常见的NoSQL数据库进行一下简单介绍 如有描述错误的 欢迎指正 一 数据库分类 数据库分两大类 SQL数据库和NoSQL数据库 SQL数据库 常用的有 Mysql Oracle MSSQL DB2等 这些大家应该都比
  • $.each()方法的使用

    jQuery中 each 方法的使用 each 是对数组 json和dom结构等的遍历 说一下他的使用方法吧 1 遍历一维数组 var arr1 aa bb cc dd each arr1 function i val 两个参数 第一个参数
  • 【AAAI 2021】多出口架构的知识蒸馏:Harmonized Dense Knowledge Distillation Training for Multi-Exit Architectures

    AAAI 2021 多出口架构的知识蒸馏 Harmonized Dense Knowledge Distillation Training for Multi Exit Architectures 论文地址 主要问题 主要思路 多出口网络
  • Java 面向对象之封装

    目录 1 类和对象 2 单个对象内存图 3 两个对象内存图 4 两个引用指向同一对象内存图 5 成员变量和局部变量 6 private 关键字 7 this 关键字 8 this 内存原理 9 封装 10 构造方法 面向过程编程 POP P
  • sqli-labs-master【Less-11/12/13/14/15/16】

    Less 11 进入Less 11之后 可以看到是全新的关卡 是一个表单的形式 需要我们填入用户名和密码才可以提交 首先我们随便填入一个用户名和密码看页面会回显给我们什么内容 我在这块用户名和密码都输入的是123 可以看到登陆尝试失败 不过
  • java中steam流的使用

    1 数组合并 原始合并 定义俩个集合合并为一个集合 例子 public class 测试 把小王合道 list中 public static void main String args throws Exception final Arra
  • 华为机试——0-1背包问题

    华为机试 0 1背包问题 给定一个数 比如20 然后给定几个数字 如1 3 5 7 8 输出 1 3 5 7 8 0 0 0 1 1 因为5 7 8 20 include
  • Qt实现窗口整体拖拽功能.

    我们都知道 当我们鼠标点击并移动应用程序的上边框时 窗口才会整体移动 但有些窗口 你点击移动其他部分 也可以让窗口跟着鼠标移动 这里就教你如何整体移动窗口 其实实现这样的功能很简单 只需要重写以下的3个鼠标函数即可 c h ifndef C