2

我创建了一个名为 Painter 的类,并QPainter在构造函数中创建了 pQMainWindow作为参数传递。

所以在 mainwindow.hi 中添加了:

protected:
    void paintEvent(QPaintEvent *e);

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

在 mainwindow.cpp 我添加

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

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

画家.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

和画家.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 似乎很愚蠢,它就是这样工作的。有一种方法可以只初始化一次屏幕或让开始工作?

谢谢。

4

2 回答 2

1

解决了

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

这对我来说似乎很愚蠢,但它比在每一帧上声明它要好。如果有人有更好的主意。

谢谢

于 2012-07-19T20:04:36.700 回答
0

你没有使用QPainter它的本意。本质上, aQPainter是用来创建的

QPainter p(this);

绘画事件处理程序中。如果需要,您仍然可以使用指针传递画家,但如果您使用太多指向QPainter.

我的理解是,只有在发生绘画事件时,画家才能正确初始化,这就是为什么您的初始化Painter::Painter(QMainWindow* m)会产生非功能性的QPainter.

于 2015-06-10T20:53:15.853 回答