博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt重写paintEvent方法遇到的问题
阅读量:5210 次
发布时间:2019-06-14

本文共 1072 字,大约阅读时间需要 3 分钟。

背景:最近在推进先进软件开发技术大作业的过程中,需要在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);

 

转载于:https://www.cnblogs.com/SChenqi/p/9926054.html

你可能感兴趣的文章
YII缓存依赖的应用
查看>>
决策树在机器学习的理论学习与实践
查看>>
Biee 11g权限详解
查看>>
minggw 安装
查看>>
Jquery操作cookie,实现简单的记住用户名的操作
查看>>
[BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树
查看>>
PHP基础入门(二)
查看>>
[Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)
查看>>
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
18款在线代码片段测试工具
查看>>
20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析
查看>>
静态变量数组实现LRU算法
查看>>
在SQL中怎么把一列字符串拆分为多列
查看>>
中文系统 上传file的input显示英文
查看>>
css样式写一个三角形
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>
javascript获取textarea中所选文本的开始位置、结束位置和选择的文本
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
事务备份还原分离附加
查看>>