欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

QT实现自定义标题栏,并移动

程序员文章站 2022-07-13 23:14:32
...

qt默认的标题栏样式让人看着挺尴尬的。为了使界面好看,我们需要重新制作标题栏。

qt给了两个隐藏标题栏的方法:

1:setWindowFlags(Qt::FramelessWindowHint);//生成无边界窗口,无法移动、缩放窗口
2:setWindowFlags(Qt::CustomizeWindowHint);//关闭默认串口标题提示,注意:这个可以隐藏标题栏,并且可以保留串口缩放功能。但是:在顶部会留下一小片空白,有点难看

在这里,我们主要讲使用第一种方法生成无边界窗口,并实现窗口移动;

我采用了事件监听鼠标事件的方法,来进行窗口移动;以下是简要代码:

QPoint   mouse_press_point;   //定义全局变量,记录鼠标点击时的坐标  
if(inner_obj==ui->top_widget){//事件过滤器,发现目标对象上有事件
        if(inner_event->type()==QEvent::MouseButtonPress){//发现有点击事件,记录鼠标此刻的坐标
            mouse_press_point=dynamic_cast<QMouseEvent*>(inner_event)->globalPos();
        }
        if(inner_event->type()==QEvent::MouseMove){//发现有鼠标移动,此刻进行串口移动
            int inner_top_mouse_point_x=dynamic_cast<QMouseEvent*>(inner_event)->globalX();
            int inner_top_mouse_point_y=dynamic_cast<QMouseEvent*>(inner_event)->globalY();
            this->move(this->x()+inner_top_mouse_point_x-mouse_press_point.x(),this->y()+inner_top_mouse_point_y-mouse_press_point.y());//移动窗口
            mouse_press_point=dynamic_cast<QMouseEvent*>(inner_event)->globalPos();//记录移动后的鼠标坐标
        }
    }