首页 > 其他分享 >QT 界面隐藏标题栏后设置可支持拖动

QT 界面隐藏标题栏后设置可支持拖动

时间:2023-10-13 22:24:38浏览次数:32  
标签:QT 拖动 void 标题栏 QMouseEvent isDragging CustomWidget event

QT 界面隐藏标题栏后设置可支持拖动,需要重写界面的mousePressEvent,mouseMoveEvent,mouseReleaseEvent事件,代码如下。

 1 #include <QWidget>
 2 #include <QMouseEvent>
 3 
 4 class CustomWidget : public QWidget {
 5     Q_OBJECT
 6 
 7 public:
 8     explicit CustomWidget(QWidget *parent = nullptr);
 9 
10 protected:
11     void mousePressEvent(QMouseEvent *event) override;
12     void mouseMoveEvent(QMouseEvent *event) override;
13     void mouseReleaseEvent(QMouseEvent *event) override;
14 
15 private:
16     bool isDragging;
17     QPoint dragPosition;
18 };
19 
20 CustomWidget::CustomWidget(QWidget *parent) : QWidget(parent), isDragging(false) {
21     // 隐藏标题栏
22     setWindowFlags(Qt::FramelessWindowHint);
23 }
24 
25 void CustomWidget::mousePressEvent(QMouseEvent *event) {
26     if (event->button() == Qt::LeftButton) {
27         isDragging = true;
28         dragPosition = event->globalPos() - frameGeometry().topLeft();
29         event->accept();
30     }
31 }
32 
33 void CustomWidget::mouseMoveEvent(QMouseEvent *event) {
34     if (isDragging) {
35         move(event->globalPos() - dragPosition);
36         event->accept();
37     }
38 }
39 
40 void CustomWidget::mouseReleaseEvent(QMouseEvent *event) {
41     if (event->button() == Qt::LeftButton) {
42         isDragging = false;
43         event->accept();
44     }
45 }
46 
47 int main(int argc, char *argv[]) {
48     QApplication a(argc, argv);
49     CustomWidget widget;
50     widget.setGeometry(100, 100, 400, 200);  // 设置初始位置和大小
51     widget.show();
52 
53     return a.exec();
54 }

 

标签:QT,拖动,void,标题栏,QMouseEvent,isDragging,CustomWidget,event
From: https://www.cnblogs.com/jiaxinyoudiansha/p/17763386.html

相关文章

  • QT 给图片添加一层颜色遮罩
    最近公司需求,在一张带有透明度的图片上增加一层颜色遮罩,记录一下。1#include<QImage>2#include<QPainter>34intmain(){5//行数56//加载原始图像7QImageoriginalImage("path/to/your/image.png");89//行数910//创建......
  • 第三方IDE使用gdb调试Qt实现pretty print
      直接使用gdb调试Qt应用时,Qt的一些数据类型没法友好的显示出来,而qtcreator可以很好的展示出来,qtcreator也是通过gdb来调试的,在展示数据时,其实是gdb通过python脚本来处理后显示的,这些python脚本位于/usr/share/qtcreator/debugger这个位置(ubuntu20.04)。gdb在启动时,会自动在某......
  • QT基础教程(QPalette和QIcon)
    (文章目录)前言本篇文章继续讲解QT中的知识,主要为大家讲解QPalette和QIcon。QPalette和QIcon都是Qt框架中用于图形界面设计的类,它们分别用于管理调色板和图标的相关功能。一、QPalette类QPalette(调色板)QPalette类用于管理和控制Qt应用程序的颜色方案,它定义了各种图形界......
  • QT部件透明阴影效果和透明窗体
      透明效果1.设置整个窗体透明调用setWindowOpacity()方法,传入一个0~1之间的值来表示透明度;1表示不透明,0表示完全透明,在构造函数中添加setWindowOpacity(0.5);//0~1之间2.设置窗体透明,部件不透明在构造函数中添加//设置窗体透明this->setAttribute(Qt::WA_Transluc......
  • QT--QString的arg方法
    在QT的QString中,arg方法类似于C中的printf中使用的格式输出符(只是有点类似)。在QT5的帮助文档中,可以看出以下几点:使用arg(str1,str2,str3)这种方法进行替换。使用arg(str1).arg(str2).arg(str3)这种方法进行替换。​使用arg(int, int, int)这种方式进行替换。解释......
  • 关于vscode编写qt,qdebug无法输出到终端的问题
    这个问题主要是cmake那边的qt设置没弄好。其中WIN32_EXECUTABLEON。这个选项要设置为OFF。不然qdebug无法打印到终端中。如果本来就没有这set_target_properties的话,可以在cmake最后一行加上这个,并且将WIN32_EXECUTABLEON设置为OFF即可。set_target_properties(appl......
  • Qt信号槽与事件循环学习笔记
    事件与事件循环信号槽机制事件与事件循环在Qt中,事件(event)被封装为QEvent类/子类对象,用来表示应用内部或外部发生的各种事情。事件可以被任何QObject子类的对象接收并处理。根据事件的创建方式和调度方式,Qt中事件可分为三类,分别是:自发事件(Spontaneousevent)由窗口系统(windo......
  • Qto_SiteBaseQuantities
    Qto_SiteBaseQuantities场地基准工程量:场地所有引用的定义中通用的基准工程量。  NameTypeDescriptionGrossPerimeterQ_LENGTHUmfangUmfangderGrundstücksgrenze,gemesseninhorizontalerProjektion.GrossPerimeterPerimeterofthesiteboundary,......
  • Qt_C++读写NFC标签Ntag支持windows国产linux操作系统
    本示例使用的发卡器:ntag2标签存储结构说明#include"mainwindow.h"#include"./ui_mainwindow.h"#include<QDebug>#include"QLibrary"#include"QMessageBox"//本示例可在windows、linux系统内编译、运行//判断windows、linux系统,声明动态库函数---------------......
  • QT串口QSerialPort类循环接收可能导致的数据接收不到问题。
    QT串口QSerialPort类循环接收可能导致的数据接收不到问题。建议在使用readAll前调用bytesAvailable来判断缓存区数据是否存在。下面这个程序为错误示范,可能会导致串口数据一直无法读取。QByteArrayresponseData;if(m_serialport->isOpen()){m_serialport->waitForRead......