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;//释放鼠标 }
最后就实现了按住标题栏拖动主窗口的功能;还有个问题是系统边框可以拖动来调整大小的功能,我们下一节再来将如何实现;
标签:窗口,QT,自定义,标题栏,按钮,event,鼠标 来源: https://www.cnblogs.com/bclshuai/p/16214227.html