【Qt】自定义标题栏并实现鼠标拖拽移动
来源:互联网 发布:打开telnet端口命令 编辑:程序博客网 时间:2024/05/21 00:49
1.Qt在windows下变成,标题栏归系统管理器管理。想要自定义就只能把原来的隐藏掉,然后自己添加组件,自己做;
2.首先设置属性,隐藏掉原来的标题栏:
/* 标题栏样式 */ this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);3.重写鼠标的三个事件,分别是:
/* custom title bar */ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;4.代码如下:
void MainWindow::mousePressEvent(QMouseEvent *event){ if( event->button() == Qt::LeftButton && ui->frame_title_bar->frameRect().contains(event->globalPos() - this->frameGeometry().topLeft())){ m_Press = event->globalPos(); leftBtnClk = true; } event->ignore();//表示继续向下传递事件,其他的控件还可以去获取}void MainWindow::mouseReleaseEvent(QMouseEvent *event){ if( event->button() == Qt::LeftButton ){ leftBtnClk = false; } event->ignore();}void MainWindow::mouseMoveEvent(QMouseEvent *event){ if( leftBtnClk ){ m_Move = event->globalPos(); this->move( this->pos() + m_Move - m_Press ); m_Press = m_Move; } event->ignore();}5.注意事项:
1)通过frame.frameRect().contains 可以判断鼠标位置是否在自定义的标题栏上;但是这里传入的位置是以MainWindow的左上角为原点的;
所以使用的是
event->globalPos() - this->frameGeometry().topLeft()来得到该坐标;
2)窗口移动直接使用move() ; 里面参数是:
this->pos() + m_Move - m_Press逻辑上也很好理解,现在的窗口位置 + ( 鼠标现在位置 - 鼠标原来位置 ); 不要忘记去更新鼠标的原来位置 m_Press = m_Move;
3) 最后的 event->ignore(); 保证该鼠标事件可以继续传递下去,以便其他控件可以继续处理。因为标题栏是在主窗口上面的,所以event会先传给标题栏,然后如果没有被接受才会传给主窗口。
1 0
- 【Qt】自定义标题栏并实现鼠标拖拽移动
- Qt自定义标题栏并实现拖拽
- Qt 在自定义标题栏长按鼠标左键来实现窗体移动
- 自定义标题栏随鼠标移动
- ...Qt实现--自定义标题栏
- QT 隐藏标题栏 窗口移动 鼠标事件
- 【Qt】自定义标题栏并实现最小化/最大化/关闭窗口功能
- 【框架-MFC】禁用鼠标拖拽标题栏移动窗口
- Qt之去除窗口的标题栏、通过鼠标移动窗口
- Qt去掉窗口标题栏实现移动缩放
- C#如何实现标题栏随鼠标移动的效果?
- Qt 个性化标题栏,自定义标题栏
- 自定义 Qt 窗口标题栏
- QT 自定义标题栏
- qt 自定义标题栏
- Qt 自定义标题栏
- Qt:自定义标题栏(QMainWindow)
- qt创建自定义标题栏
- 欢迎使用CSDN-markdown编辑器
- bzoj4514【SDOI2016】数字配对
- 科学计算工具-ipython
- 【数据结构】c++实现HashTable(开链法)
- bzoj4517【SDOI2016】排列计数
- 【Qt】自定义标题栏并实现鼠标拖拽移动
- php求素数的简单方法
- AOV网的拓扑排序
- Java---网络编程(4)-C/S-B/S
- Rendering Problems:Failed to convert .jpg in to a drawable
- HDOJ 1792 A New Change Problem (数论)
- MyBatis Generator 详解
- Eclipse 安装插件后不显示的解决办法
- c++第五次实验