先要清楚,只是拖动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. ​一文读懂EfficientDet
  2. Java 导出excel表 POI
  3. 快速排序实现以及时间复杂度分析
  4. c++ sendmessage 鼠标 坐标是相对自身吗_CAD大家都说会:这些知识不知道,你敢说会CAD吗?...
  5. Socket实现java服务端与AndroidApp端数据交互
  6. python2.7 跨文件全局变量的方法
  7. Linux软件安装解决方案
  8. C语言笔试不好应该转专业吗,你认为大学里什么学科“难学”?过来人说出几门,考试难补考更难...
  9. 通过shell访问hive_【HIVE】SHELL调用Hive查询
  10. hibernate Restrictions 用法
  11. 纯css+js打造返回顶部代码
  12. VS2015调试无法加载PDB 文件
  13. TortoiseGit安装中文语言包无法切换语言
  14. 从病毒开始聊聊那些windows下大杂烩
  15. 解决Android Studio不提示控件的XML属性
  16. 软件测试学习书籍推荐【乐搏TestPRO】
  17. HTB打靶日记:Bashed
  18. js怎么把字符串转数字
  19. Hystrix - 阻断器
  20. 日语学习资料下载 N5—N1都有

热门文章

  1. 用户输入和while循环
  2. 【前端词典】进阶必备的网络基础(下)
  3. Web前端开发标准规范
  4. Java_Shell多线程
  5. Android EditText禁止复制粘贴
  6. JQuery中的html(),text(),val()区别
  7. DroidPilot V2.1 手写功能特别版
  8. DynamicMethodHelper R2 2012-08-14 DynamicMethod ILGenerator.Emit
  9. 使 IDEA 的 termina l可以使用 Linux 下的终端命令
  10. psm倾向得分匹配法举例_互助问答第110期:分组回归样本及倾向得分匹配相关问题...