【发布时间】:2013-08-15 13:41:42
【问题描述】:
我正在尝试在QWidget 窗口中绘制一个简单的二维图形。
定义了一个paintEvent,还定义了一个QPainter 类的painter 对象。
我的绘图包含我需要在不同位置多次绘制的元素,例如线条、文本等。为此,我使用函数来绘制具有不同位置的这些线条。对于文本也是如此。为了使程序更短,也模块化。
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 类的画家对象不允许使用类型名。
如果我定义QPainterpainter1对象如下图:
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 函数中调用一次?
【问题讨论】:
-
我自己发现,painter对象可以传递为QPainter&painter。然后就可以了。
-
您还可以将画家“程序”存储在
QPicture中。然后,您只需在paintEvent中重播它。另一种方法是使用QPainterPath来存储可重用、可缩放的矢量图形。
标签: visual-c++ qt5 qpainter