zoukankan      html  css  js  c++  java
  • 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);    
  • 相关阅读:
    jQuery中常用方法和jQuery思维导图
    jQuery
    JS-AJAX and jQuery-AJAX
    Linux系统里导入maven项目
    maven项目里的ssh框架整合
    spring框架的两大核心:IOC和AOP
    JAVA的抽象类和接口
    JAVA面向对象的三大特征
    JAVA---面向对象
    JAVA---方法
  • 原文地址:https://www.cnblogs.com/SChenqi/p/9926054.html
Copyright © 2011-2022 走看看