2012-07-19 16 views
2

我創建了一個名爲painter的類,並在構造函數中創建了QPainter p,並將QMainWindow作爲參數傳遞。QPainter init畫家並使用它

所以在mainwindow.h我添加:

protected: 
    void paintEvent(QPaintEvent *e); 

private: 
    Ui::MainWindow *ui; // Created by the QT 
    Painter* p; 

在我加入

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    p=new Painter(this); 
} 

void MainWindow::paintEvent(QPaintEvent *e) 
{ 
    p->render(this); 
} 

Painter.h

#ifndef PAINTER_H 
#define PAINTER_H 
#include <QtCore> 
#include <QtGui> 

class Painter 
{ 
private: 
    QPainter* painter; 
    bool init; 

public: 
    Painter(QMainWindow* m); 
    ~Painter(); 

    void render(QMainWindow* m); 
}; 

#endif // PAINTER_H 
0 mainwindow.cpp

和painter.cpp

#include "painter.h" 

Painter::Painter(QMainWindow* m) 
{ 
    painter=new QPainter(m); 
    //init=false; 
} 

void Painter::render(QMainWindow* m) 
{ 
    painter->drawLine(10, 3,123, 909); 
} 

它不會畫的事。

,如果我做

void Painter::render(QMainWindow* m) 
{ 
    painer->begin(m); 
    painter->drawLine(10, 3,123, 909); 
} 

它渲染線和2-3秒後關閉

只有這樣,才能使其正常工作是做

void Painter::render(QMainWindow* m) 
{ 
    QPainter p(m); 
    p.drawLine(10, 3,123, 909); 
} 

但似乎愚蠢的初始化每一幀的p,它的工作原理就是這樣。 有一種方法可以一次初始化屏幕或開始工作?

謝謝。

回答

1

painter->begin(this->m); 
painter->drawLine(10, 2, 1232, 1222); 
painter->end(); 

看來愚蠢的我,但它比declarate它的每一幀上較好地解決它。 如果有人有更好的主意。

感謝

0

您沒有使用QPainter它是如何註定的。從本質上講,QPainter是爲了使用

QPainter p(this); 

Paint事件處理程序來創建。如果你需要的話,你仍然可以使用指針傳遞畫家,但是如果你使用了太多指針到QPainter,你很可能會遇到類似的問題。

我的理解是,只有當繪畫事件正在進行時,畫家才能正確初始化,這就是爲什麼您在Painter::Painter(QMainWindow* m)中的初始化會產生非功能QPainter