【QT开发问题】使用自定义的QGroupBox,重写绘图事件paintEvent后边框消失的问题
  dmEJF87nCQJa 2023年11月02日 40 0
C++

问题描述

Qt界面开发过程中,使用自定义的QGroupBox,重写绘图事件paintEvent时,出现边框被覆盖的情况,或边框消失的问题。
左图是原始状态,直接重写绘图事件后,会变成右图空白状态。
                      

                            图1                                                                                     图2

原因与解决方法

这是因为,默认的绘图事件存在给GroupBox类绘制边框的代码,所以重写的时候被覆盖了。要恢复默认状态,需要在重写的paintEvent函数中,先继承父类的方法,调用默认的绘图事件,再去写自己需要的代码,如下:
// MyGroupBox继承自QGroupBox
void MyGroupBox::paintEvent(QPaintEvent * event)
{
    // 需要先调用父类方法,因为重写了
    QGroupBox::paintEvent(event);
    this->setTitle("GroupBox");
    
    // 这个是绘制黑色的边框
    // 边框设置参考:https://blog.csdn.net/weixin_44335538/article/details/126365191
    this->setStyleSheet("QGroupBox{border:1px solid black; margin-top: 2.3ex;}"
                        "QGroupBox::title{subcontrol-origin:margin;left: 10px;}"
                        "QGroupBox *{}");
    
    // 下面可以写自己的代码
    // ......
    // ......
}

PS:上面关于 QGroupBox 黑色边框的设置,搜过很多Qt Style Sheets(QSS)设置参数,但只有上面这个自己电脑可以用,并且一定要加 "QGroupBox *{}" 才不会标题下沉,虽然我也不晓得为啥,有知道原因的朋友欢迎交流!!

回答:后来自己又多试了几遍,可以慢慢调整 margin-top 这个参数改变标题位置,并且不同设备可能有些出入,setStyleSheet 可以参考 QT 官方关于 QSS 样式表的教程:The Style Sheet Syntax,学习一下。

 
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   2024年05月01日   80   0   0 C++
  BYaHC1OPAeY4   2024年05月08日   57   0   0 C++
  yZdUbUDB8h5t   2024年05月05日   43   0   0 C++
  oXKBKZoQY2lx   2024年05月17日   58   0   0 C++
dmEJF87nCQJa