我试图在QWidget
窗口中绘制一个简单的二维图形。
定义了paintEvent
,并且还定义了QPainter
类的painter对象。
我的绘图包含我需要在不同位置绘制多个元素的元素,例如线条,文本等。为此,我使用函数绘制具有不同位置的这些线条。同样的文字。为了使程序更短,也是模块化的。
paintEvent
函数调用用于计算和绘制的函数。
如何将QPainter
中定义的paintEvent
画家对象传递给函数。
例如
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
类的对象。
我看了this thread,但说明并不清楚。必须在所有绘图实例中调用begin()
和end()
函数,或者只在paintEvent
函数中调用一次吗?
答案 0 :(得分:0)
正如您所提到的,您将在班上实现这些功能。
在标题中:
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 ...
}