Qt C++界面開發過程中,使用自定義的QGroupBox類,重寫繪圖事件paintEvent時,出現邊框被覆蓋的情況,或邊框消失的問題。 ...
問題描述
Qt界面開發過程中,使用自定義的QGroupBox,重寫繪圖事件paintEvent時,出現邊框被覆蓋的情況,或邊框消失的問題。 左圖是原始狀態,直接重寫繪圖事件後,會變成右圖空白狀態。![](https://img2023.cnblogs.com/blog/2674165/202212/2674165-20221219123248969-229572096.png)
![](https://img2023.cnblogs.com/blog/2674165/202212/2674165-20221219123254053-267465707.png)
圖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,學習一下。