我目前正在尝试将我的 QPainter 对象封装到可重用的类中,可能是相互派生的。这使他们能够以任何他们喜欢的方式改变画家,有自己的孩子来画画等:
我DrawArc
来源于QPainterPath
DrawArc::DrawArc() : QPainterPath()
{}
void DrawArc::paint(QPainter* painter)
{
painter->save();
//...
arcTo(/*...*/);
lineTo(/*...*/);
painter->translate(QPoint(100,100));
painter->drawPath(*dynamic_cast<QPainterPath*>(this));
painter->restore();
}
并DrawBeam
衍生自DrawArc
DrawBeam::DrawBeam() : DrawArc()
{}
void DrawBeam::paint(QPainter* painter)
{
painter->save();
//...
painter->setPen(QPen(color, 4));
painter->setBrush(brush);
DrawArc::paint(painter);
painter->restore();
}
在实际的小部件中,我正在执行以下操作
BeamWidget::BeamWidget(QWidget* parent) : QWidget(parent)
{
DrawBeam* mybeam = new DrawBeam();
}
void BeamWidget::paintEvent(QPaintEvent * /* event */)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
mybeam->paint(&painter);
}
但是,我在painter->drawPath(*dynamic_cast<QPainterPath*>(this));
几秒钟(或几百次重绘)后看到了巨大的性能损失。其余过程中的其他所有内容似乎都运行良好,但是当我启用该行时,性能会迅速下降。
此外,所有源自DrawArc
绘画的元素似乎有时会失去其 QBrush 样式并保持可见,即使setAutoFillBackground(true);
已设置...