QT使用提升的绘图类问题,画饼图、直方图
2018-01-08 14:27
435 查看
最近自己在写一个QT程序,需要用到绘图,我自己写了两个绘图类一个画饼图,一个画直方图,把他们以提升的方式加入到主程序,结果只有一个图画出来了。
代码如下:
pie.h
pie.cpp
直方图的代码结构和饼图类似,只不过paintEvent函数有所不同,但怎么都画不出来。网上说paintEvent函数是系统回调的,只能调用一次?pie这个画图类提升之后我并没有显示调用,却自己绘制了。用qDebug测试,发现饼图在每次点开那个页面就自动绘制,而直方图的绘图函数并没有被调用,将
paintEvent( QPaintEvent *)
改成
paintEvent( )
然后在主窗口调用paintEvent( ),测试发现,paintEvent( ) 被调用了,画图部分前后的qDebug都有输出,但图像就是出不来。
实在是有些困惑,解决了再来分享我的答案吧
顺便分享个QT绘图比较直观的介绍
http://blog.163.com/modingfa_002/blog/static/1109254662012264278194/
问题已经解决,问题原因是我更改了paintevent函数的名称,导致系统无法识别
之前是这样的:
void Histogram::paintEvent1(QPaintEvent *)
自做聪明的改了paintevent的函数名称,呵呵
正确的:
void Histogram::paintEvent(QPaintEvent *)
代码如下:
pie.h
#ifndef PIE_H #define PIE_H #include <QWidget> 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 <QPainter> #include <QLabel> #include <QFont> #include <QDebug> #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 = 30 * 16; // int spanAngle = 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); }
直方图的代码结构和饼图类似,只不过paintEvent函数有所不同,但怎么都画不出来。网上说paintEvent函数是系统回调的,只能调用一次?pie这个画图类提升之后我并没有显示调用,却自己绘制了。用qDebug测试,发现饼图在每次点开那个页面就自动绘制,而直方图的绘图函数并没有被调用,将
paintEvent( QPaintEvent *)
改成
paintEvent( )
然后在主窗口调用paintEvent( ),测试发现,paintEvent( ) 被调用了,画图部分前后的qDebug都有输出,但图像就是出不来。
实在是有些困惑,解决了再来分享我的答案吧
顺便分享个QT绘图比较直观的介绍
http://blog.163.com/modingfa_002/blog/static/1109254662012264278194/
问题已经解决,问题原因是我更改了paintevent函数的名称,导致系统无法识别
之前是这样的:
void Histogram::paintEvent1(QPaintEvent *)
自做聪明的改了paintevent的函数名称,呵呵
正确的:
void Histogram::paintEvent(QPaintEvent *)
相关文章推荐
- Qt中使用Xerces C++遇到的问题纪要
- Qt中使用QtSql问题
- 关于使用了QtWebKit的PyQt程序打包后无法显示网页图片的问题(Mac0S和windows)
- QT使用数据库的语法问题
- Qt Designer中自定义控件的使用(提升法与插件法)
- Qt 4使用MySQL的中文问题解决方法
- QT 4.5 windows版本 安装问题 及 Junction 使用
- 使用Qt Visual Studio Add-in 实现中文ts文件,解决中文乱码问题
- QT线程初次使用。遇到的问题。
- 在JavaScript中使用Qt对象成员函数的参数及返回值问题
- Qt中使用SDL和FFmpeg的编译问题
- Qt 笔记(记录使用Qt中遇到的一些问题)
- 使用QT和Gstreanmer 遇到的一些问题
- 关于Qt使用QSqlQuery执行sql语句时出现out of memory的问题
- 解决6410使用7寸液晶屏,第一次进入Qt2.2无法使用触摸笔的问题
- qt 应用程序中使用 close系统调用函数 注意问题
- QT中使用槽函数来关闭窗口,导致内存泄露的问题以及解决办法
- QT的安装问题(尤其是针对QT-embedded-opensource-x86 无法使用qvfb的问题)
- QT编程中如何给按钮等控件加载图标以及QT编程中使用中文的问题
- Qt:在TreeModel+QTreeView中使用复选框问题