QPainter 初始化画家并使用它
Posted
技术标签:
【中文标题】QPainter 初始化画家并使用它【英文标题】:QPainter init painter and use it 【发布时间】:2012-07-19 18:21:20 【问题描述】:我创建了一个名为 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);
画家.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 似乎很愚蠢,它就是这样工作的。 有没有办法只初始化一次屏幕或让开始工作?
谢谢。
【问题讨论】:
【参考方案1】:解决了
painter->begin(this->m);
painter->drawLine(10, 2, 1232, 1222);
painter->end();
这对我来说似乎很愚蠢,但总比在每一帧上都声明要好。 如果有人有更好的主意。
谢谢
【讨论】:
【参考方案2】:您没有使用QPainter
应有的意思。本质上,QPainter
是使用
QPainter p(this);
内部绘制事件处理程序。如果您需要,您仍然可以使用指针传递画家,但如果您使用太多指向 QPainter
的指针,您可能会遇到类似的问题。
我的理解是,只有在进行绘制事件时,画家才会正确初始化,这就是为什么您在 Painter::Painter(QMainWindow* m)
中的初始化会产生非功能性的 QPainter
。
【讨论】:
以上是关于QPainter 初始化画家并使用它的主要内容,如果未能解决你的问题,请参考以下文章