自己开发了一个傅里叶周期分析软件,可用于股票,基金,期货、外汇等数据的周期分析和趋势分析;
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;//释放鼠标
}最后就实现了按住标题栏拖动主窗口的功能;还有个问题是系统边框可以拖动来调整大小的功能,我们下一节再来将如何实现;
版权声明:本文为baochunlei1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。