我的主窗体是QWidget,在主窗体内有一个QWidget控件:widget_show。
我想在widget_show里面画图,使用了函数paintEvent()函数;
paintTest.h文件:
class paintTest : public QWidget
{
Q_OBJECT
public:
paintTest(QWidget *parent = 0);
~paintTest();
protected:
void paintEvent(QPaintEvent* event);
public slots:
void start_paint();
void stop_paint();
private:
Ui::paintTestClass ui;
QTimer* paint_timer;
};
paintTest.cpp 文件:
#include "painttest.h"
paintTest::paintTest(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
paint_timer=new QTimer(this);
connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(start_paint()));
connect(ui.pushButton_3,SIGNAL(clicked()),this,SLOT(stop_paint()));
connect(paint_timer,SIGNAL(timeout()),this,SLOT(update()));
}
paintTest::~paintTest()
{
}
void paintTest::paintEvent(QPaintEvent* event)
{
QPainter painter(ui.widget_show);
cout<<"enter int paintEvent"<<endl;
painter.setRenderHint(QPainter::Antialiasing,true);
painter.setPen(QPen(Qt::black,6,Qt::DashDotLine,Qt::RoundCap));
painter.setBrush(QBrush(Qt::green,Qt::SolidPattern));
painter.drawEllipse(20,20,100,50);
}
void paintTest::start_paint()
{
cout<<"start_paint!"<<endl;
paint_timer->start(1000);
cout<<"timer is up"<<endl;
}
void paintTest::stop_paint()
{
cout<<"stop paint!"<<endl;
paint_timer->stop();
cout<<"timer is stop"<<endl;
}
上面的代码在运行时,paintEvent()事件可以触发,但是不能画出图。
如果红色标记的语句换成:
QPainter painter(this);
那么在主窗体就可以画出图了。。
但是我不想在主窗体中画图,只想在widget_show里画,各位大虾有没有什么建议?在这里谢过各位了呀。