热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

QT使用提升的绘图类问题,画饼图、直方图

提升方法:在UI界面拖入一个widget,如图UI界面右键widget,点击提升为,选择全局包含,如图一般来说

提升方法:


  • 在UI界面拖入一个widget,如图
    这里写图片描述
  • UI界面右键widget,点击提升为,选择全局包含,如图
    这里写图片描述

  • 一般来说,被提升的类需要事先加入到项目中。

    遇到的问题:

    最近自己在写一个QT程序,需要用到绘图,我自己写了两个绘图类一个画饼图,一个画直方图,把他们以提升的方式加入到主程序,结果只有一个图画出来了。
    代码如下:

    pie.h

    #ifndef PIE_H
    #define PIE_H#include class pie : public QWidget
    {Q_OBJECT
    public:explicit pie(QWidget *parent = 0);void paintEvent(QPaintEvent *);~pie();signals:public slots:
    };#endif // PIE_H

    pie.cpp

    #include "pie.h"
    #include
    #include
    #include
    #include
    #include "histogram.h"
    #define sum 10
    #define first 2
    #define second 3
    #define third 4
    #define fourth 1
    pie::pie(QWidget *parent) : QWidget(parent)
    {
    // 第一个属性是字体(微软雅黑),第二个是大小,第三个是加粗(权重是75)
    // QFont::Light - 25 高亮
    // QFont::Normal - 50 正常
    // QFont::DemiBold - 63 半粗体
    // QFont::Bold - 75 粗体
    // QFont::Black - 87 黑体QFont font( "Microsoft YaHei", 11, 75);QLabel *mai = new QLabel(this);mai->setText("售出");mai->setFont(font);mai->move(300,0);QLabel *sheng = new QLabel(this);sheng->setText("剩余");sheng->setFont(font);sheng->move(300,20);
    }pie::~pie()
    {}
    void pie::paintEvent( QPaintEvent *)
    {qDebug() <<"画饼图";
    // QRectF rectangle(10.0, 20.0, 80.0, 60.0);
    // int startAngle &#61; 30 * 16;
    // int spanAngle &#61; 120 * 16;// QPainter painter(this);
    // painter.drawPie(rectangle, startAngle, spanAngle);//设置饼图所在位置QRectF rectangle(30.0, 80.0, 300.0, 300.0);QPainter painter(this);//画售出示意块painter.fillRect(332,5,11,11,Qt::red);//画剩余示意块painter.fillRect(332,25,11,11,Qt::blue);
    // painter.fillRect(510,460,10,10,Qt::yellow);
    // painter.fillRect(510,480,10,10,Qt::green);QPainter painter2(this);//设置画笔风格为抗锯齿(绘图光滑)painter2.setRenderHint(QPainter::Antialiasing);painter2.setBrush(Qt::red);painter2.setPen(Qt::NoPen);painter2.drawPie(rectangle,0 ,360*16*first/sum);painter2.setBrush(Qt::blue);painter2.drawPie(rectangle,360*16*first/sum,360*16*second/sum);painter2.setBrush(Qt::yellow);painter2.drawPie(rectangle,360*16-360*16*third/sum-360*16*fourth/sum,360*16*third/sum);painter2.setBrush(Qt::green);painter2.drawPie(rectangle,360*16-360*16*fourth/sum,360*16*fourth/sum);}

    直方图的代码结构和饼图类似&#xff0c;只不过paintEvent函数有所不同&#xff0c;但怎么都画不出来。网上说paintEvent函数是系统回调的&#xff0c;只能调用一次&#xff1f;pie这个画图类提升之后我并没有显示调用&#xff0c;却自己绘制了。用qDebug测试&#xff0c;发现饼图在每次点开那个页面就自动绘制&#xff0c;而直方图的绘图函数并没有被调用&#xff0c;将

    paintEvent( QPaintEvent *)
    改成
    paintEvent( )

    然后在主窗口调用paintEvent( )&#xff0c;测试发现&#xff0c;paintEvent( ) 被调用了&#xff0c;画图部分前后的qDebug都有输出&#xff0c;但图像就是出不来。

    实在是有些困惑&#xff0c;解决了再来分享我的答案吧
    顺便分享个QT绘图比较直观的介绍
    http://blog.163.com/modingfa_002/blog/static/1109254662012264278194/

    问题已经解决&#xff0c;问题原因是我更改了paintevent函数的名称&#xff0c;导致系统无法识别
    之前是这样的&#xff1a;
    void Histogram::paintEvent1(QPaintEvent *)
    自做聪明的改了paintevent的函数名称&#xff0c;呵呵
    正确的&#xff1a;
    void Histogram::paintEvent(QPaintEvent *)


推荐阅读
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
author-avatar
955单车小宏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有