QT:只允许在自定义标题栏中鼠标拖动控制窗口位置

2023-11-08

目录

说明

效果展示

代码


说明

在使用了自定义的标题栏,想要实现鼠标只能在标题栏中拖动窗口,在其它地方拖动不了窗口的效果。

我们这里是在标题栏类的鼠标事件中处理拖动窗口的事情。

实现过程:标题栏类中的鼠标事件获取了拖动位置后,通过移动标题栏的父类部件,从而实现窗口拖动。

 

效果展示

 

代码

主窗口代码

#include "widget.h"
#include "ui_widget.h"

#include <QLabel>
#include <QLayout>
#include "my_title_bar.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //标题栏
    MyTitleBar* title_bar = new MyTitleBar(this);

    //设置背景色
    title_bar->setStyleSheet("MyTitleBar{background-color: gray;}");

    //设置窗口属性和布局
    this->setWindowFlags(Qt::FramelessWindowHint);//去除标题栏
    QVBoxLayout* main_vlayout = new QVBoxLayout(this);
    this->setLayout(main_vlayout);
    main_vlayout->setMargin(0);
    main_vlayout->setSpacing(0);
    main_vlayout->addWidget(title_bar, 1);
    main_vlayout->addStretch(9);

}

Widget::~Widget()
{
    delete ui;
}

 

标题栏代码

#ifndef MYTITLEBAR_H
#define MYTITLEBAR_H

#include <QLabel>
#include <QMouseEvent>

class MyTitleBar : public QLabel
{
    Q_OBJECT
public:
    explicit MyTitleBar(QWidget *parent = 0)
        : QLabel(parent)
    {

    }

protected:
    void mousePressEvent(QMouseEvent* ev) override
    {
        QWidget* parent_widget = this->parentWidget();
        start_move_pos_ = ev->globalPos() - parent_widget ->frameGeometry().topLeft();
    }
    void mouseMoveEvent(QMouseEvent* ev) override
    {
        //移动父部件位置
        QWidget* parent_widget = this->parentWidget();
        parentWidget->move(parent_widget->mapToGlobal(ev->pos() - start_move_pos_));
    }

private:
    QPoint      start_move_pos_;
};

#endif // MYTITLEBAR_H

 

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

QT:只允许在自定义标题栏中鼠标拖动控制窗口位置 的相关文章

  • 如何在qt中创建正确的退出按钮

    我正在尝试创建一个退出按钮来正确关闭我在 QT 中制作的 GUI 我尝试通过以下方式执行此操作 include
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • QWidget::showMinimized() 不起作用

    在 Ubuntu 13 04 上 如果使用QWidget showMinimized 为了最小化窗口 我发现通过单击系统任务栏上的应用程序图标恢复它后 调用QWidget showMinimized 无法工作 connect minimum
  • 常量类成员、赋值运算符和 QList

    请确认我是否正确并告诉我是否有更好的解决方案 我了解具有常量成员的对象 例如int const width 无法由编译器隐式创建的合成赋值运算符处理 但是 QList 我想 std list 也是如此 需要一个有效的赋值运算符 因此 当我想
  • QWebSocketServer - 不释放内存

    首先 我在安全 websocket 服务器应用程序上运行 valgrind 并发现了一个问题 在 Qt Memcheck 中我必须检查 外部错误 看到它 一些字节是肯定输了 指着我的main就在我的地方QCoreApplication ex
  • 扩展 TabViewStyle styleData

    我目前正在尝试找到一种更好的方法来执行此操作 将图标添加到选项卡 现在 我正在放弃 styleData title 以包含图标源 但如果能够扩展 styleData 就更好了 这样我就可以包含其他自定义属性 这是我当前的黑客 Tab tit
  • QWinTaskbarProgress 不会显示

    我使用的是windows7和Qt5 3 0 我在 MainWindow 的构造函数中添加了以下内容 但任务栏上没有显示任何内容 我错过了什么 QWinTaskbarProgress pTaskbarProgress new QWinTask
  • QObject多重继承

    我正在尝试在 C Qt 类中使用 mix 来提供一大堆具有通用接口的小部件 该接口是以这样的方式定义的 如果它被定义为其他小部件类的基类 那么小部件本身将具有这些信号 class SignalInterface public QObject
  • 在 Windows 上从源代码构建 PhantomJS-2

    我正在尝试基于这些在 Windows 8 1 x64 上从源代码构建 PhantomJS 2 的开发版本指示 https github com ariya phantomjs wiki PhantomJS 2 但是我收到以下错误 mingw
  • QT C++ QRegularExpression 多个匹配

    我想使用正则表达式从 QString html 中提取信息 我明确想使用正则表达式 无解析器解决方案 和类Q正则表达式 http qt project org doc qt 5 0 qtcore qregularexpression htm
  • 在 Windows 上以 QML 播放 RTSP 视频

    我正在尝试将 QML 中的 RTSP 流播放到视频标签中 如下所示 Repeater model 8 Video Layout fillWidth true Layout fillHeight true fillMode VideoOutp
  • MSVC C4100:“应用程序”:未引用的形式参数警告

    使用 MSVC 编译时 以下代码会生成 C4100 警告 这怎么可能 显然引用了 应用程序 class ApplicationInfo public QObject Q OBJECT public static void initializ
  • qvariant 作为 qhash 中的键

    我想创建一个带有 QVariants 键的数据结构 它看起来像这样 QHash
  • 构建qt程序时未定义的符号:找不到qt_version_tag

    我正在学习Qt5 6 我正在使用 Ubuntu 14 4 当我链接我的程序时 出现以下错误 undefined reference to qt version tag 在 CMakeLists txt 中 link libraries Qt
  • 如何通过信号和槽传递参数?

    我的 GUI 包括LineEdit and a 按钮 当 的时候按钮单击后 插槽clicked 叫做 我想在之间建立信号槽关系clicked 作为信号和doSomething 作为插槽 问题是doSomething 无权访问 UI 并且do
  • 如何从键盘为 QTableWidget 创建信号?

    我有一张桌子 可以通过左 右 上 下按钮在里面移动 现在 当我停留在某个单元格并按空格键时 我需要创建一个信号 该信号还应该带来该单元格的坐标 我尝试使用 QTableWidget 的标准信号 但它不起作用 我该如何解决这个问题 创建一个单
  • Qt - 意外的 GDB 退出

    我正在尝试开发一个应用程序 该应用程序创建图像并使用双线性插值填充颜色像素 然后显示它 到目前为止我的代码如下 include
  • 更改 Qt 中的语言环境

    我尝试使用 QLocale 和 setDefault 函数更改区域设置 但似乎不起作用 以下是使用 C 本地化库和 QLocale 更改语言环境的示例 对于 C 本地化库 它似乎可以工作 但对于 QLocale setDefault 函数调
  • QtWebEngine Quicknano 在嵌入式 Linux 中没有声音

    我已将 QtWebEngine 编译到我的 i MX6 嵌入式设备中 当我尝试使用 Quicknanobrowser 播放 YouTube 视频时 视频会播放 但没有声音 事实上 当我尝试播放音频文件时没有声音hpr dogphilosop
  • Qmake 不支持源目录下的构建目录

    我创建了一个可以在 OS X 上编译和运行的应用程序 我现在想开始让它在 Windows 上运行 首先 我将项目复制到 Windows 机器上并尝试编译 但收到此错误 警告 Qmake不支持源目录下的构建目录 有任何想法吗 将影子构建目录设

随机推荐

  • 华为OD机试真题-最短木板长度【2023.Q1】

    题目描述 小明有 n 块木板 第 i 1 i n 块木板长度为 ai 小明买了一块长度为 m 的木料 这块木料可以切割成任意块 拼接到已有的木板上 用来加长木板 小明想让最短的木板尽量长 请问小明加长木板后 最短木板的长度可以为多少 输入描
  • 第三章 FlinkCDC专题之Mysql-CDC-source基础练习(stream形式)

    1 导入依赖
  • js开发的小问题汇总

    js开发的小问题汇总 1 require js 中引入jquery插件 以cookie为例 require js 最基本写法为 require config paths jquery jquery 1 11 1 min domReady r
  • RK3568开发环境搭建

    前面我给大家展示了RK3568的开发板 但是并没有对RK3568的芯片资源进行描述 这里简单给大家看下该芯片的资源 具体的请看瑞芯微官网https www rock chips com 对芯片有了写了解之后 下面就开始搭建开发环境 让我们早
  • 文章发布测试

    测试文章收益能得多少钱
  • MATLAB入门教程(3):数组的创建与使用

    前言 代码粘贴后并不好看 故使用图片粘贴如下 代码部分是我在MATLAB里面加的注释版本 使用版本为MATLAB R2022a 咱们理解数组这个概念可以类比向量 就是由几个数字构成的一个变量 咱们称其为数组 一 手动创建数组 前面说数组可以
  • 使用Altium Designer报错的处理记录 2 :could not find board outline using primitives centerline

    2 报错内容 could not find board outline using primitives ceterline due to the following errors 出现原因及解决办法 导入DWG外形文件后 圆弧上有很多段线
  • sql注入原理

    sql注入
  • egg:Error: controller not exists

    前言 在学习和运用node的egg时的报错信息记录 报错 解决办法 确定router js里面的路由和自己写的Controller相匹配 确定你在controller最后一行写了module exports 个人问题 router js里面
  • 什么是图表设计,图表设计的意思

    在信息时代中 一些数据的价值需要经过深度的挖掘之后才能够表现出来 当我们使用分析工具挖掘出数据的价值之后 就需要找到一种合适的方式来表达数据 对于当前的数据管理工作来说 真正能够帮助人们完美的呈现数据的工具就是图表 图表会让数据可视化的效果
  • chatglm微调

    chatGML 看到 官方教程 ChatGLM 6B 微调 P Tuning LoRA Full parameter 精准空降到 15 27 https www bilibili com video BV1fd4y1Z7Y5 share s
  • [论文阅读] (12)英文论文引言introduction如何撰写及精句摘抄——以入侵检测系统(IDS)为例

    娜璋带你读论文 系列主要是督促自己阅读优秀论文及听取学术讲座 并分享给大家 希望您喜欢 由于作者的英文水平和学术能力不高 需要不断提升 所以还请大家批评指正 非常欢迎大家给我留言评论 学术路上期待与您前行 加油 前一篇文章详细介绍ACE去雾
  • JS与CSS交互&表单验证

    目录 一 基本概念 1 基本介绍 2 JavaScript 特效之四大家族 1 基本组成 1 三大系列 offset scroll client 2 事件对象 event 3 三大家族区别 二 表单验证 1 表单验证思路 一 基本概念 1
  • Android Studio 下载 Gradle 失败或下载速度慢的解决方案

    方案1 参考文档 方案2 参考文档 方案3 更改 Android Studio 中使用的 Gradle 的路径 在安装 Android Studio 时 会默认安装一个 Gradle 版本 文件在 Android Studio 安装目录的根
  • 刷力扣算法--蓝桥杯备战

    刷题网站 https leetcode cn com problems container with most water submissions 参考书籍 LeetCode 101 和你一起你轻松刷题 C 使用语言 python 记录刷题
  • 东北大学acm第一周周赛

    include
  • 48使用说明书_十分钟不到,就学会使用乐高studio2.0做图纸啦!上

    猜一猜第五个齿轮是朝左转动还是朝右转动 点击空白处查看答案 大家看了端午节的龙舟图纸 在后台留言希望我出一个studio20的入门教程 今天zfeng老师带着入门教程来啦 乐高积木作为最受欢迎的玩具之一 对大人小孩都有着非常大的吸引力 乐高
  • 计算机网络复习题2(含答案及解析及知识点)

    1 影响信道最大传输速率的因素主要有 A A 信道带宽和信噪比 B 码元传输速率和噪声功率 C 频率特性和带宽 D 发送功率和噪声功率 香农定理 带宽受限 有噪声时 极限 无差错的信息传输速率 分贝数 dB 10lg S N 例如信噪比是3
  • Vue动态路由传值和Get传值

    Vue动态路由 在一个页面获取上一个页面的传值 1 配置动态路由步骤 const routes main js文件中 path Content aid component Content 动态路径参数以冒号开头 在上一个页面中配置
  • QT:只允许在自定义标题栏中鼠标拖动控制窗口位置

    目录 说明 效果展示 代码 说明 在使用了自定义的标题栏 想要实现鼠标只能在标题栏中拖动窗口 在其它地方拖动不了窗口的效果 我们这里是在标题栏类的鼠标事件中处理拖动窗口的事情 实现过程 标题栏类中的鼠标事件获取了拖动位置后 通过移动标题栏的