我创建了一个名为painter的类,并在构造函数中创建了QPainter
p,并将QMainWindow
作为参数传递。
所以在mainwindow.h中我添加了:
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);
}
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
和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,它的工作方式就是这样。 有一种方法可以初始化屏幕一次或开始工作吗?
感谢。
答案 0 :(得分:1)
用
解决了painter->begin(this->m);
painter->drawLine(10, 2, 1232, 1222);
painter->end();
这对我来说似乎很愚蠢,但它比在每一帧都声明它更好。 如果有人有更好的主意。
由于
答案 1 :(得分:0)
您没有使用QPainter
它的意图。基本上,QPainter
意味着使用
QPainter p(this);
内部 paint事件处理程序。如果你需要,你仍然可以使用指针传递画家,但是如果使用过多指针QPainter
,你可能会遇到类似的问题。
我的理解是,只有在绘制事件发生时,画家才能正确初始化,这就是为什么Painter::Painter(QMainWindow* m)
中的初始化会产生无效的QPainter
。