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);    
  • 相关阅读:
    RequireJS的简单应用
    关于浏览器兼容处理—— 识别IE浏览器
    Div+CSS命名规范
    用CSS开启硬件加速来提高网站性能(转)
    5步解决移动设备上的300ms点击延迟
    全面理解BFC
    纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等)
    Less和Sass编译
    Linux初级知识_03 -- 系统基础命令
    Linux初级知识_02 -- 基础命令
  • 原文地址:https://www.cnblogs.com/SChenqi/p/9926054.html
Copyright © 2011-2022 走看看