• 7426阅读
  • 4回复

关于调用QPaintEvent的问题 [复制链接]

上一主题 下一主题
离线liyayao
 

只看楼主 倒序阅读 楼主  发表于: 2010-02-06
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
    class Dialog;
}

class Dialog : public QDialog {
    Q_OBJECT
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

protected:
    void changeEvent(QEvent *e);
    void paintEvent(QPaintEvent *);
private:
    void paint(QPainter *painter);
    Ui::Dialog *ui;
    int i;
    float j;
private slots:

void on_pushButton_clicked();
void timerUpDate();

};

#endif // DIALOG_H


#include "dialog.h"
#include "ui_dialog.h"
#include <QPainter>
#include <QtCore>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    i=100;
    j=100;
    QTimer *timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(timerUpDate()));
    timer->start(1000);

}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}
void Dialog::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawPoint(i,j);
}

void Dialog::timerUpDate()

{
    i=i++;
    update();
}

void Dialog::on_pushButton_clicked()
{
    j=ui->lineEdit->text().toFloat();
}

我想按一下pushbutton取得输入框lineEdit的数,然后把点画在图上,问题在于我每一次画图时之前的点就不见了,出现了新的点,我想显示之前的全部的点,调用QPaintEvent出现问题了。。。。这个QPaintEvent只能在update();中调用,有没有其他的方法调用?
离线xinqingfly

只看该作者 1楼 发表于: 2010-02-06
如果最后还需要知道前面绘制的各个点的位置的话,最好用个QList把你绘制的点保存下来然后在paintEvent里重绘所有的点,如果不需要知道的话自己使用双缓冲
菜鸟也是鸟
离线liyayao

只看该作者 2楼 发表于: 2010-02-06
楼上的好像挺复杂的,有没有简单点的方法。。。本人新手一个。。。。
离线xinqingfly

只看该作者 3楼 发表于: 2010-02-06
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
    class Dialog;
}

class Dialog : public QDialog {
    Q_OBJECT
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

protected:
    void changeEvent(QEvent *e);
    void paintEvent(QPaintEvent *);
private:
    void paint(QPainter *painter);
    Ui::Dialog *ui;
    int i;
    float j;
    QPixmap     pixmap;
private slots:

void on_pushButton_clicked();
void timerUpDate();

};

#endif // DIALOG_H


#include "dialog.h"
#include "ui_dialog.h"
#include <QPainter>
#include <QtCore>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    i=100;
    j=100;
    pixmap = QPixmap(size());
    pixmap.fill(this, 0, 0);
    
    QTimer *timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(timerUpDate()));
    timer->start(1000);

}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}
void Dialog::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawPixmap(0, 0, pixmap);
}

void Dialog::timerUpDate()

{
    i=i++;
    QPainter painter(&pixmap);
    painter.initFrom(this);
    painter.setPen(Qt::red);
    painter.drawPoint(i,j);
    update();
}

void Dialog::on_pushButton_clicked()
{
    j=ui->lineEdit->text().toFloat();
}
菜鸟也是鸟
离线liyayao

只看该作者 4楼 发表于: 2010-02-06
谢谢啦。。。。
快速回复
限100 字节
 
上一个 下一个