【无标题】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;//释放鼠标
}

最后就实现了按住标题栏拖动主窗口的功能;还有个问题是系统边框可以拖动来调整大小的功能,我们下一节再来将如何实现;

猜你喜欢

转载自blog.csdn.net/baochunlei1/article/details/124533263