一般来说,被提升的类需要事先加入到项目中。
遇到的问题:
最近自己在写一个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)
{
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(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);
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 *)