QT自定义关闭、放大、缩小按钮标题栏
自己开发了一个傅里叶周期分析软件,可用于股票,基金,期货、外汇等数据的周期分析和趋势分析;
1.问题原因
因为要改变Qt程序的标题栏的颜色皮肤,增加抬头说明,授权说明,而QT自带的标题栏颜色好像无法改变,增加新的按钮文字更是难上加难,所以就自定义一个程序的标题栏。如下图所示。
2.实现步骤
2.1自定义标题栏界面
2.2将系统自带的标题栏隐藏掉
//设置为无边框,自定义关闭,放大,缩小按钮
this->setWindowFlags(Qt::FramelessWindowHint);
2.3 实现关闭、最大化,最小化,按钮的响应
//顶部按钮响应 connect(ui.pBClose, &QPushButton::clicked, [=]() {close(); }); connect(ui.pBMaxWindow, &QPushButton::clicked, [=]() { if (this->isMaximized()) { this->showNormal(); } else { this->showMaximized(); } }); connect(ui.pBMinWindow, &QPushButton::clicked, [=]() {this->showMinimized(); });
2.4实现按住标题栏拖动窗口移动
系统自带的标题栏按住鼠标左键可以拖动窗口的作用,这里也要折现这个功能
通过鼠标的按下按的时候判断鼠标是不是在标题栏上,是的话将左侧鼠标按下设置为true,鼠标移动函数内部判断鼠标是否按下,计算鼠标的实时位置,和一开始的位置做比较,计算出鼠标移动的相对位移,然后将主窗口的坐标加上相对位移,再移动主窗口,更新起始位置。鼠标释放函数中,只要将左键按下布尔值设置为false;
void FuliyePeriod::mousePressEvent(QMouseEvent * event) { //只能是鼠标左键移动和改变大小 if (event->button() == Qt::LeftButton) { if (ui.widgetToolBar->underMouse()) { m_leftMousePressed = true; //按下时鼠标左键时,窗口在屏幕中的坐标 m_StartPoint = event->globalPos(); } } } void FuliyePeriod::mouseMoveEvent(QMouseEvent *event) {//移动窗口 if (m_leftMousePressed) { QPoint curPoint = event->globalPos(); //按住移动时的位置 QPoint movePoint = curPoint - m_StartPoint; //普通窗口 QPoint mainWinPos = this->pos(); this->move(mainWinPos.x() + movePoint.x(), mainWinPos.y() + movePoint.y()); m_StartPoint = curPoint; } } void FuliyePeriod::mouseReleaseEvent(QMouseEvent * event) { m_leftMousePressed = false;//释放鼠标 }
最后就实现了按住标题栏拖动主窗口的功能;还有个问题是系统边框可以拖动来调整大小的功能,我们下一节再来将如何实现;
自己开发了一个股票智能分析软件,功能很强大,需要的关注微信公众号:QStockView
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix