Qt重寫paintEvent方法遇到的問題


背景:最近在推進先進軟件開發技術大作業的過程中,需要在Qt的某個控件(widget)中繪制一個2D圖形,該widget位於TabWidget的某一個tab內,如圖所示。

  在Qt的子控件widget中利用QPaint類繪制圖形,需要定義一個新的類,該類繼承自QWidget,並且需要在這個新的類中重寫paintEvent()方法。自定義類的頭文件和cpp文件如下:

//drawpregressbar.h
#ifndef DRAWPROGRESSBAR_H
#define DRAWPROGRESSBAR_H #include "qwidget.h" class Drawprogressbar : public QWidget { public: explicit Drawprogressbar(QWidget *parent = nullptr); void paintEvent(QPaintEvent *event); ~Drawprogressbar(); }; #endif // !DRAWGROGRESSBAR_H
//drawprogressbar.cpp
#include "Drawprogressbar.h" #include "qwidget.h" #include "qpainter.h" Drawprogressbar::Drawprogressbar(QWidget *parent) : QWidget(parent) { } void Drawprogressbar::paintEvent(QPaintEvent *event) { //TODO:在此完成繪圖 } Drawprogressbar::~Drawprogressbar() { }

問題:在程序中調用類中paintEvent()方法時問題出現了——其繪制的圖形只能出現在子控件左上角 50 X 300 的位置上。

原因:利用自定義的paintEvent()函數繪圖時,畫布大小並不是子控件的大小,這時需要在paintEvent()函數中將畫布的大小進行調整。

解決方案: 可以將子控件的高度和寬度(width、height)值通過構造函數傳入自定義的類,並在paintEvent()函數中調整畫布大小,這樣就完美解決了!

    //設置畫布大小
    setFixedHeight(mheight);
    setFixedWidth(mwidth);    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM