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

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bclshuai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值