【发布时间】:2015-05-13 11:24:29
【问题描述】:
每次我在 QWidget 上重新绘制时,它都会重新绘制并删除之前的绘制。重绘时如何保存之前的状态?
【问题讨论】:
每次我在 QWidget 上重新绘制时,它都会重新绘制并删除之前的绘制。重绘时如何保存之前的状态?
【问题讨论】:
你必须明确地这样做。一种方法是在QImage 上绘制,然后在paintEvent 中简单地将内容blit 到小部件。
一种更简单的方法是将所有图形基元存储在某种容器中,并根据需要对它们进行绘制。 Qt 提供了这样一个容器:QPicture 是一个图形元文件,用于存储图形操作以供以后重放。
例如:
class PicLabel : public QLabel {
QPicture m_picture;
public:
PicLabel(const QString & text, QWidget * parent = 0) :
QLabel(text, parent) {}
PicLabel(QWidget * parent = 0) : QLabel(parent) {}
void addPoint(const QPointF & point) {
QPainter p(&m_picture);
p.drawPoint(point);
update();
}
void addLine(const QPointF & start, const QPointF & end) {
QPainter p(&m_picture);
p.drawLine(start, end);
update();
}
void clear() {
std::swap(m_picture, QPicture());
update();
}
protected:
void paintEvent(QPaintEvent * event) Q_DECL_OVERRIDE {
QLabel::paintEvent(event);
QPainter p(this);
p.drawPicture(0, 0, m_picture);
}
};
【讨论】:
render() 标签once 进入图像,当标签首次显示时。之后每次都可以将点添加到图像上。这是一种非常复杂的方法。你不应该这样做。