16,203
社区成员
发帖
与我相关
我的任务
分享
#ifndef TESTPAINT_H
#define TESTPAINT_H
#include <QPainter>
class TestPaint
{
public:
TestPaint();
void drawA(QPainter &painter);
void drawB(QPainter &painter);
};
#endif // TESTPAINT_H
testpaint.cpp
#include "testpaint.h"
TestPaint::TestPaint()
{
}
void TestPaint::drawA(QPainter &painter)
{
painter.setPen(QPen(Qt::red,5));
painter.drawLine(0,0,100,100);
}
void TestPaint::drawB(QPainter &painter)
{
painter.setPen(QPen(Qt::blue,5));
painter.drawEllipse(0,0,100,100);
}
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include "testpaint.h"
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::Dialog *ui;
TestPaint *testPaint;
void (TestPaint::*pfun)(QPainter &painter);
void paintEvent(QPaintEvent *event);
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
testPaint=new TestPaint();
pfun=NULL;
}
Dialog::~Dialog()
{
delete ui;
delete testPaint;
}
void Dialog::on_pushButton_clicked()
{
pfun=TestPaint::drawA;
update();
}
void Dialog::on_pushButton_2_clicked()
{
pfun=TestPaint::drawB;
update();
}
void Dialog::paintEvent(QPaintEvent *event)
{
if(pfun)
{
QPainter painter(this);
(testPaint->*pfun)(painter);
pfun=NULL;
}
}