【QT开发问题】使用自定义的QGroupBox,重写绘图事件paintEvent后边框消失的问题

2023-02-14,,,,

问题描述

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黑色边框的设置,搜过很多qss设置参数,但只有上面这个自己电脑可以用,并且一定要加 "QGroupBox *{}"才不会标题下沉,虽然我也不晓得为啥,有知道原因的朋友欢迎交流!!

参考文章

Stackoverflow-PyQt5: Why does the default style of a QGroupBox disappear when painting?

 

【QT开发问题】使用自定义的QGroupBox,重写绘图事件paintEvent后边框消失的问题的相关教程结束。

《【QT开发问题】使用自定义的QGroupBox,重写绘图事件paintEvent后边框消失的问题.doc》

下载本文的Word格式文档,以方便收藏与打印。