精华内容
下载资源
问答
  • Qt隐藏窗口标题栏以及无法拖动窗口

    千次阅读 2018-05-04 23:37:47
    1.隐藏标题栏、工具窗口以及窗口置顶 setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint); 2.设置窗体透明度 setWindowOpacity(0.7); 3.隐藏标题栏后实现拖动 隐藏标题栏后窗体...

    1.隐藏标题栏、工具窗口以及窗口置顶

    setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);

    2.设置窗体透明度

    setWindowOpacity(0.7);

    3.隐藏标题栏后实现拖动

    隐藏标题栏后窗体是无法拖动的,这个时候就需要重写mousePressEvent、mouseMoveEvent和mouseReleaseEvent。

    添加一个成员变量QPoint。

    private:
        QPoint m_lastPos;

    重写mousePressEvent、mouseMoveEvent和mouseReleaseEvent函数。

    void mousePressEvent(QMouseEvent *event)
    {
        m_lastPos = event->globalPos();
    }
    
    void mouseMoveEvent(QMouseEvent *event)
    {
        this->move(this->x() + (event->globalX() - m_lastPos.x()),
                   this->y() + (event->globalY() - m_lastPos.y()));
        m_lastPos = event->globalPos();
    }
    
    void mouseReleaseEvent(QMouseEvent *event)
    {
        // 其实这里的mouseReleaseEvent函数可以不用重写
        m_lastPos = event->globalPos();
    }

    4.解决鼠标按下其他控件后移动鼠标到QWidget区域时界面移动的问题

    按照上面的写法,会出现一个问题,就是在按住当前界面上的控件时,当按住这个动作一直存在并将鼠标从控件移动到QWidget的区域时,界面也会跟着移动,并且这样的移动时直接跳了过去,这样就很不完美,而且在界面很小,控件很多的情况下,拖动显得非常卡顿,所以我们就需要在mouse事件中添加一个判断,判断当前鼠标按下是否是处于QWidget所在的区域。

    修改很简单,在自定义QWidget界面类中添加一个bool型变量isPressedWidget。

    bool isPressedWidget;

    然后在mousePressEvent、mouseMoveEvent和mouseReleaseEvent三个函数中各添上一行。

    void mousePressEvent(QMouseEvent *event)
    {
        m_lastPos = event->globalPos();
        isPressedWidget = true; // 当前鼠标按下的即是QWidget而非界面上布局的其它控件
    }
    
    void mouseMoveEvent(QMouseEvent *event)
    {
        if (isPressedWidget) {
            this->move(this->x() + (event->globalX() - m_lastPos.x()),
                       this->y() + (event->globalY() - m_lastPos.y()));
            m_lastPos = event->globalPos();
        }
    }
    
    void mouseReleaseEvent(QMouseEvent *event)
    {
        // 其实这里的mouseReleaseEvent函数可以不用重写
        m_lastPos = event->globalPos();
        isPressedWidget = false; // 鼠标松开时,置为false
    }

    5.美化自定义窗口

    在为自定义窗口类使用qss美化(解决qss对QWidget修改样式表无效,可参考这篇文章:解决Qt使用qss时对QWidget无效)。

    在对窗体设置了背景图片,如果背景图片是不规则矩形,则在背景图片后,窗体会露出一部分很丑,这个时候可以将窗体的属性设为透明属性。

    setAttribute(Qt::WA_TranslucentBackground);
    展开全文
  • 1.隐藏标题栏、工具窗口以及窗口置顶 // 去掉标题栏,去掉工具栏,窗口置顶 setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint); 2.设置窗体透明度 setWindowOpacity(0.7); ...

    1.隐藏标题栏、工具窗口以及窗口置顶

        // 去掉标题栏,去掉工具栏,窗口置顶
        setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);

      

    2.设置窗体透明度

    setWindowOpacity(0.7);

     

    3.隐藏标题栏后实现拖动

    隐藏标题栏后窗体是无法拖动的,这个时候就需要重写mousePressEvent、mouseMoveEvent和mouseReleaseEvent。在对应的mainwindow.h头文件中添加一个成员变量QPoint。同时重定义三个鼠标事件函数

     private slots:   
        //由于去掉显示界面的菜单栏和标题栏,无法拖动窗口,重写关于窗口拖动用的几个函数
        void mousePressEvent(QMouseEvent *e);
        void mouseMoveEvent(QMouseEvent *e);
        void mouseReleaseEvent(QMouseEvent *e);
    
    private:
        QPoint last;//窗口拖动用变量

    重写mousePressEvent、mouseMoveEvent和mouseReleaseEvent函数。在mainwindow.cpp中

    //三个鼠标事件的重写
    void MainWindow::mousePressEvent(QMouseEvent *e)
    {
        last = e->globalPos();
    }
    
    void MainWindow::mouseMoveEvent(QMouseEvent *e)
    {
      
         int dx = e->globalX() - last.x();
         int dy = e->globalY() - last.y();
         last = e->globalPos();
         move(x()+dx, y()+dy);
    }
    
    void MainWindow::mouseReleaseEvent(QMouseEvent *e)
    {
        int dx = e->globalX() - last.x();
        int dy = e->globalY() - last.y();
        move(x()+dx, y()+dy);
    }

     

     

    4.解决鼠标按下其他控件后移动鼠标到QWidget区域时界面移动的问题

    按照上面的写法,会出现一个问题,就是在按住当前界面上的控件时,当按住这个动作一直存在并将鼠标从控件移动到QWidget的区域时,界面也会跟着移动,并且这样的移动时直接跳了过去,这样就很不完美,而且在界面很小,控件很多的情况下,拖动显得非常卡顿,有时候还会导致直接退出程序。

    重写三个鼠标事件后的问题

     

    所以我们就需要在mouse事件中添加一个判断,判断当前鼠标按下是否是处于QWidget所在的区域。

    修改很简单,在自定义QWidget界面类中添加一个bool型变量isPressedWidget。

    private:
        QPoint last;//窗口拖动用变量
        bool isPressedWidget;

     

    然后在mousePressEvent、mouseMoveEvent和mouseReleaseEvent三个函数中各添上一行。

    //三个鼠标事件的重写
    void MainWindow::mousePressEvent(QMouseEvent *e)
    {
        isPressedWidget = true; // 当前鼠标按下的即是QWidget而非界面上布局的其它控件
        last = e->globalPos();
    }
    
    void MainWindow::mouseMoveEvent(QMouseEvent *e)
    {
        if (isPressedWidget)
        {
            int dx = e->globalX() - last.x();
            int dy = e->globalY() - last.y();
            last = e->globalPos();
            move(x()+dx, y()+dy);
        }
    }
    
    void MainWindow::mouseReleaseEvent(QMouseEvent *e)
    {
        int dx = e->globalX() - last.x();
        int dy = e->globalY() - last.y();
        move(x()+dx, y()+dy);
        isPressedWidget = false; // 鼠标松开时,置为false
    }

    添加bool变量 isPressedWidget后完美解决该问题,再次编译运行后窗体可正常移动,同时点击combox控件时也不会出现窗口跳动情况

    添加bool变量isPressedWidget后效果图

    5.美化自定义窗口

    在为自定义窗口类使用qss美化(解决qss对QWidget修改样式表无效,可参考这篇文章:解决Qt使用qss时对QWidget无效)。在对窗体设置了背景图片,如果背景图片是不规则矩形,则在背景图片后,窗体会露出一部分很丑,这个时候可以将窗体的属性设为透明属性。

    setAttribute(Qt::WA_TranslucentBackground);

     

    最后感谢原文作者:Vasilisyl,附带原文链接:https://blog.csdn.net/qq_37354286/article/details/80201644

    展开全文
  • 1. 隐藏标题栏: 隐藏标题栏后,最大化、最小化、关闭按钮 就相当于隐藏了。 main_gui_window w; w.setWindowFlags(Qt::Dialog|Qt::FramelessWindowHint); w.show(); 或者在构造函数里设置 this->...

    1.  隐藏标题栏:  隐藏标题栏后,最大化、最小化、关闭按钮 就相当于隐藏了。

     main_gui_window w;
     w.setWindowFlags(Qt::Dialog|Qt::FramelessWindowHint);
     w.show();
    
    或者在构造函数里设置
    
    this->setWindowFlags(Qt::Dialog|Qt::FramelessWindowHint);

    2. 设置窗口以最大化方式显示

    main_gui_window w;
    w.setWindowState(Qt::WindowMaximized);
    w.show();
    
    或者在构造函数里设置
    
    this->setWindowState(Qt::WindowMaximized);

     

    展开全文
  • Qt去掉窗口标题栏实现移动缩放
  • Qt隐藏系统标题栏,使用自定义标题栏

    千次阅读 多人点赞 2020-09-23 18:23:22
    今天我们来实现自定义标题栏的实现,这里面用到了布局,鼠标事件重写等知识点,首先还是自定义标题栏的创作,像下面这样,可放大,可缩小,并且随着窗体大小的改变,控件做自适应调整。有没有感觉狗子的界面做的...

    在这里插入图片描述



    一.前言

           今天我们来实现自定义标题栏的实现,这里面用到了布局,鼠标事件重写等知识点,首先还是自定义标题栏的创作,像下面这样,可放大,可缩小,并且随着窗体大小的改变,控件做自适应调整。有没有感觉狗子的界面做的越来越好看,哈哈,其实只是想告诉大家,孰能生巧,第一次可能很丑,慢慢来嘛,我第一次也被人喷过。废话不多说,看实现。
    在这里插入图片描述


    二.实现

    在这里插入图片描述
           首先还是先把界面搭建出来,如上图,我知道有很多不会搭建这个布局,确实,我刚学习的时候,书中关于布局也是草草略过,我之前写过一个布局的介绍,大家可以看一下,qt 如何设计好布局和漂亮的界面,当然,你看了其中有关布局的知识,相信我,你依旧还是不能随心所欲的布成自己想要的局。你去百度,关于布局的知识,其实和我上面写的一样,其实这里面还隐藏一些配合,只不过可能这个知识点对于会布局的人来说太简单了,他们会选择性略过。
    比如下面几个我能想到的问题:

    • 对顶级窗口进行布局,布局和窗体有一定距离;

    解决方法:选中顶级窗体,属性里面找到布局,将红括号内的值改为0,布局和窗体的距离就为0.
    在这里插入图片描述

    • 拖了一个布局,并且将相关控件加入布局,但是一旦将顶级窗口添加布局,控件大小就会不可控;

    解决方法:之所以如此,是因为我们没有指定控件最大值和最小值,这也是为什么大家看到的软件,有一些控件最大化后跟随界面变大,而一些控件是不变化的,就比如最小化,最大化控件等等。大家只需要选中控件,右键选中选中大小限定,就会得到我们想要的大小。
    在这里插入图片描述

    • 界面放大或者缩小后,控件位置问题;

    解决方法:要运用弹簧(horizontalSpacer)这个功能,并灵活运用sizetype这个属性,例如Minimum(最小大小),Maximum(最大大小),Expanding(自适应)等等,比如我们选择了Maximum,界面放大时,我们就不用这个弹簧放大。
    在这里插入图片描述

    然后布局就写到这里,涉及的有关控件背景图可加我qq2506897252获取,无偿的。


           下面说一下功能的实现,有细心读者可能发现上面的动态图有两个标题栏,这不是骗人嘛,我想说不是骗人,到最后白色的标题栏我们是要隐藏的,为了文章的前后顺序,我们暂时先把他留下。

           先将最小化,最大化以及关闭按钮的功能进行实现,这里可以选择代码实现,也可以在ui界面实现,只不过ui界面实现有一些局限性,由于我们目的是使用自定义标题栏,所以这里直接在ui界面进行实现。
    在这里插入图片描述
           进行信号和槽绑定后,我们现在就可以使用自定义的标题栏来实现最小化,最大化,关闭,接下来就是将系统的标签栏进行隐藏,如果在这之前,就将系统的标题栏隐藏,那么对于编译后生成的软件关闭将是不方便的。
    在主窗体的构造函数加入this->setWindowFlags(Qt::FramelessWindowHint);,编译运行即可隐藏系统标签栏。
    在这里插入图片描述
           隐藏后,会发现无法我们无法移动窗口了,想要移动窗口,我们需要进行鼠标事件重写,包括mousePressEvent(QMouseEvent *event)mouseMoveEvent(QMouseEvent *event)mouseReleaseEvent(QMouseEvent *event)

    首先在mainwindow.h中声明这三个函数:

        void mousePressEvent(QMouseEvent *event);//鼠标点击
        void mouseMoveEvent(QMouseEvent *event);//鼠标移动
        void mouseReleaseEvent(QMouseEvent *event);//鼠标释放
    //添加类成员m_point(QPoint类型)
    QPoint m_point;
    

    mianwindow.cpp中进行定义:

    
    void MainWindow::mousePressEvent(QMouseEvent *event)
    {
        if (event->button() == Qt::LeftButton)
        {
            m_point = event->globalPos()-frameGeometry().topLeft();
            //鼠标位置减去左上角的左边
            //可替换为m_point = event->pos();
        }
    }
    void MainWindow::mouseMoveEvent(QMouseEvent *event)
    {
        move(event->globalPos() - m_point);
        //鼠标位置减去按下点的坐标
        //可替换为event->pos() - m_point + pos();
    }
    void MainWindow::mouseReleaseEvent(QMouseEvent *event)
    {
        Q_UNUSED(event);
        //Q_UNUSED() 没有实质性的作用,用来避免编译器警告
    }
    

    对应的m_point = event->globalPos()-frameGeometry().topLeft();可替换为m_point = event->pos();

    别忘了加入头文件#include<QMouseEvent> #include<QPoint>

    完成上述代码,编译运行,窗口可通过鼠标移动。


    展开全文
  • | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint); } void LoginUI::mousePressEvent(QMouseEvent *event) { //当鼠标左键点击时. if (event->button() == Qt::...
  • QT 隐藏标题栏 窗口移动 鼠标事件

    千次阅读 2017-04-01 23:02:20
    隐藏标题栏 头文件声明虚函数 实现虚函数
  • Qt隐藏标题栏

    千次阅读 2014-09-04 21:55:15
    setWindowFlags (Qt::CustomizeWindowHint) setWindowFlags (Qt::FramelessWindowHint) 两个函数都可以去掉标题栏,区别是第一个可以鼠标缩放窗口
  • QT隐藏标题栏和背景

    2020-11-24 13:37:11
    如下图,加载日志的时候显示一个加载进度,这个时候需要隐藏背景,和标题框,可以使用一下两句代码 ...//隐藏标题栏,去除任务栏 setAttribute(Qt::WA_TranslucentBackground);//镂空背景 ...
  • Qt隐藏标题栏的情况下,实现拖拽很简单,可以看这里https://blog.csdn.net/z609932088/article/details/80865742...今天主要核心是在几年前,尝试过Qt隐藏标题栏情况下实现可自由缩放的效果, 原来的坑在这里:...
  • QT5中系统自带的标题栏比较难看,我们可以用代码来隐藏标题栏 实现代码 this->setWindowFlags(Qt::FramelessWindowHint); 制作个性标题栏 将系统的标题栏删去了,就失去了窗口移动、最大化、最小化、关闭窗口...
  • 禁止窗口标题栏按钮不可点击: setWindowFlags(windowFlags()& ~Qt::WindowCloseButtonHint); 隐藏标题栏中按钮: this->setWindowFlags(Qt::Dialog|Qt::FramelessWindowHint); 其他的方法跟他是一样的操作
  • Qt 怎么设置隐藏标题栏 Qt 怎么设置隐藏标题栏 Qt 怎么设置隐藏标题栏 Qt 怎么设置隐藏标题栏
  • 1.隐藏标题栏 // 去掉标题栏,去掉工具栏,窗口置顶 setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint); 2.设置窗口透明度 this->setWindowOpacity(0.7); 3.隐藏标题栏后实现...
  • 设置setWindowFlags(Qt::FramelessWindowHint);隐藏标题栏后,鼠标在窗体边缘时可通过移动鼠标改变窗体大小。
  • //设置窗体标题栏隐藏窗口是否有任务栏图标 this->setWindowFlags(Qt::FramelessWindowHint|Qt::Tool );
  • 自定义 Qt 窗口标题栏

    千次阅读 2012-12-12 11:13:21
    系统提供的窗口标题栏显然太千篇一律,无法满足我们的需求。但是,标题栏是由操作系统提供的,而操作系统没有提供任何方便修改标题栏的 API。首先想到的是,我们隐藏掉系统标题栏,然后绘制自己的进行替代。但是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,956
精华内容 782
关键字:

qt隐藏窗口标题栏