【问题标题】:QPainter init painter and use itQPainter 初始化画家并使用它
【发布时间】: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 似乎很愚蠢,它就是这样工作的。 有没有办法只初始化一次屏幕或让开始工作?

谢谢。

【问题讨论】:

    标签: c++ qt-creator qpainter


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-17
        • 1970-01-01
        • 2016-02-04
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-21
        相关资源
        最近更新 更多