先要清楚,只是拖动mainwindow你是拖不动那个界面的,但是又想要设计漂亮的无标题栏的控件时,那就需要加自己的重写函数了

一开始我被这个东西给吓到了,因为在网上看了很多人的文章,但是发现我找不到他们是怎么让这个类知道event的,因为大家都是只写了几个类函数,但是就这么结束了???exm???

壮胆在QT上写下了那个函数名。结果发现那玩意是可以突然变成了斜体!!!
就像这样

这时我就意识到了,这玩意会不会是在基类上定义了模板函数的…我们就直接覆盖掉了原来的那个函数,其实内部实现的时候,会检测到东西的。只不过以前的版本(基类)中,这个函数很可能是个虚函数还是什么的,所以….(好吧,其实还有可能在于使用了event作为参数)

带着这份猜测,我写看懂了网上的很多代码之后,写下下面这段代码

mMoving : bool值,判断鼠标是否移动
mLastMousePosition: QPoint类型,记录以前的位置

思路其实很简单:
1. 当按下鼠标左键的时候,将鼠标移动给激活起来。同时记录当前位置的坐标
2. 要表现那种拖动,我们就要记录鼠标是否还在被拖动中。那只要mMoving是True我们就知道鼠标还在拖动中。否则我们肯定是会检测到鼠标松动(release)那么mMoving就被设置为了False。那也就不是移动的状态了。
3. 其实学好了这个还可以改写其他的类,这样就可以使得所有的类都可以被设置为可以拖动的状态了(当然啦,是可拖动,就拖动整个框)

void QuickSearch::mouseMoveEvent(QMouseEvent* event){if (mMoving) {this->move(this->pos() + (event->globalPos() - mLastMousePosition));mLastMousePosition = event->globalPos();}
}void QuickSearch::mousePressEvent(QMouseEvent* event){if (event->button() == Qt::LeftButton) {mMoving = true;mLastMousePosition = event->globalPos();}
}void QuickSearch::mouseReleaseEvent(QMouseEvent* event){mMoving = false;
}

Qt自定义类之自由移动的mainwindow相关推荐

  1. Qt自定义类使用QSS换肤

    文章目录 一.前言 二.效果展示 三.具体步骤 3.1.自定义继承自QWidget的类 3.2.自定义类添加自定义属性及接口 3.3.完整的时钟控件代码 3.4.添加qss文件 3.5.切换qss 四 ...

  2. qt自定义类访问ui控件

    比如想在类A中访问mainwindow里面的LineEdit. 在类A里面定义一个 QLineEdit *ed;然后就可以用ed->setText()这些函数. 然后在mainwindow里面实 ...

  3. QT-子线程或自定义类操作访问主界面UI控件的几种方法

    前言 QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: 1.将ui指针公开后直接访问 (1)例如有个自己 ...

  4. Qt 自定义仿iphone开关按钮

    在做项目时,经常用到QPushButton,这次想设计成类似iphone开关按钮的样式.通过自定义Button类继承QPushButton类,重写paintEvent方法重绘按钮图形和重写mouseP ...

  5. Qt 自定义信号与槽

    注 对象与槽理解 //第一个参数lineEdit是激发事件对象,信号中的方法必须在对象中存在,并在对象类头文件signals下定义,//第二个参数信号,//第三个参数this是槽方法所属类的对象,且必 ...

  6. qt android 对话框,Qt自定义Dialog

    默认对话框 Qt默认的对话框是系统自带的样式,不同版本的windows也有些许不同,如果希望风格统一的话,这时候就需要自定义一个属于自己的对话框了 系统自带 自定义样式 新建Qt设计师类 虽然是自定义 ...

  7. 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

     1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...

  8. Qt自定义委托在QTableView中绘制控件、图片、文字

    自定义委托,继承于,QStyledItemDelegate类,重载Paint()函数, 1.实现在QTableView中绘制 格式字符串 2.实现在QTableView中绘制进度条 3.实现在QTab ...

  9. QT QVariant类数据类型使用

    QT QVariant类数据类型使用 1. QVariant 类用于封装数据成员的类型及取值等信息,该类类似于 C++ 共用体 union ,一个QVariant 对象,一次只能保存一个单一类型的值. ...

最新文章

  1. 【转】Linux世界驰骋——文件系统和设备管理
  2. 12JavaScript中的内置对象
  3. Python3+Selenium3 之滚动条操作实例与单选框的实例演示
  4. oracle PL/SQL
  5. 人工智能--遗传算法(旅行商问题)
  6. 永洪Desktop关于MAC系统使用问题
  7. 机器学习-分类算法-朴素贝叶斯算法07
  8. C# VS2012操作word文档 (一).创建文档
  9. linux 删除文件反选
  10. caffe模型文件解析_Caffe ImageData神经网络基本示例无法解析模型文件
  11. 济源一中2021高考成绩查询入口,济源一中2019高考成绩喜报、一本二本上线人数情况...
  12. C Primer Plus 第9章 函数 9.4 多源代码文件程序的编译
  13. 废旧手机屏幕做单片机显示屏_ipadmini显示屏拆解,一探究竟
  14. 【HTML+CSS网页设计与布局 从入门到精通】第8章-CSS
  15. window7梦幻桌面
  16. 思科路由器常用配置命令大全
  17. SQL中日期转换函数
  18. 微信小程序 生成二维码
  19. 稚辉君的Clion搭建STM32教程的自己实现,以及相关记录
  20. ps考证分数是用电脑改的吗

热门文章

  1. 14条建议,使你的IT职业生涯更上一层楼
  2. Control.BeginInvoke 和 Delegate.BeginInvoke 备忘
  3. org.hibernate.HibernateException: connnection proxy not usable after transaction
  4. css画三角形和提示框
  5. 时间同步-ntp服务器的搭建(docker版本)
  6. struts2(三) 输入校验和拦截器
  7. 【转】不用软件,解压Win8/Win8.1的install.wim文件
  8. ASCX呼叫ASPX.CS的方法
  9. Windows Server 2012下安装Hyper-V虚拟机
  10. 操作系统引发对未来道路的认知思考