Q paintevent外部的painter painter对象



我正试图在QWidget窗口中绘制一个简单的二维图形。定义了一个paintEvent,并且还定义了QPainter类的画家对象。我的绘图包含需要在不同位置多次绘制的元素,如线条、文本等。为此,我使用函数绘制不同位置的线条。文本也是如此。为了使程序更短,也要模块化。

paintEvent函数调用的是用于计算和绘图的函数。

如何将paintEvent中定义的QPainter画家对象传递到函数中。

例如

void Classname::drawText(QString text, int PosX, int PosY, QPainter painter)
{
    QSize size=this->size();
    QFont times("Helvetica [Cronyx]", 10);
    QFontMetrics box(times);
    int boxWidth = box.width(text);
    int boxHeight = box.height();
    painter.setFont(times);
    painter.setPen(Qt::white);
    painter.drawText(PosX,PosY,text);
}

然后我得到一个错误,其中vc++环境告诉我QPainter类的painter对象不允许使用typename。

如果我定义QPainter painter1对象,如下所示:

void Classname::drawText(QString text, int PosX, int PosY, QPainter painter)
{
    QPainter painter1;
    QSize size=this->size();
    QFont times("Helvetica [Cronyx]", 10);
    QFontMetrics box(times);
    int boxWidth = box.width(text);
    int boxHeight = box.height();
    painter.setFont(times);
    painter.setPen(Qt::white);
    painter.drawText(PosX,PosY,text);
}

程序进行了编译,但没有输出。

这是代码的一部分,我在所有函数中定义QPainter类的对象。

我读了这篇文章,但说明不清楚。必须在绘图的所有实例中调用begin()end()函数,还是仅在paintEvent函数中调用一次?

正如您所提到的,您将在类中实现这些函数。

在您的标题中:

class Class
{
// ...
protected:
    virtual void paintEvent( QPaintEvent* aEvent ) override;
private:
    void drawText( QPainter* aPainter, const QString& aText, int aPosX, int aPosY );
    // void drawLine( ... );
};

在您的来源:

void Class::paintEvent( QPaintEvent* aEvent )
{
    QPainter painter( this );
    // ...
    drawText( &painter/*, ... */ );
    drawLine( &painter/*, ... */ );
}
void Class::drawText( QPainter* aPainter, const QString& aText, int aPosX, int aPosY )
{
    // Your drawing ...
}

相关内容

  • 没有找到相关文章

最新更新