qt - 如何在 Qt 中重新绘制新线之前删除/清除以前绘制的线?

标签 qt

我正在使用 paintEvent(QPaintEvent * event) 画几条线.稍后,如果我想绘制新线,则不会清除/删除先前绘制的线。我怎么能通过删除/清除旧线来只绘制新线。是否有任何属性(property)可以清除先前绘制的线条。请告诉我。

void QGraphWidget::paintEvent(QPaintEvent * event)
{
    const QRect & rect = event->rect();
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    drawLines(painter, rect);//calling painter.drawLine() inside
}

谢谢...

最佳答案

在我看来,正确的方法是在绘制新线之前清除该区域。这可以通过使用 Stephen Chu 提出的 autoFillBackground 属性来实现,也可以通过手动调用 QPainter::eraseRect() 来实现。在 QGraphWidget::paintEvent 中绘制线条之前方法。

void QGraphWidget::paintEvent(QPaintEvent * event)
{
    const QRect & rect = event->rect();
    QPainter painter(this);
    painter.eraseRect(rect);
    painter.setRenderHint(QPainter::Antialiasing);
    drawLines(painter, rect);
}

另一种选择是“负面地”绘制上一次调用 QGraphWidget::paintEvent 的线条。 .如果您存储旧线条的坐标,您可能首先使用背景画笔绘制线条,然后使用前景画笔绘制新线条。查看可能适合您的代码示例 drawLines方法。请注意,如果您在小部件中绘制其他内容,则负向绘制线条可能会删除一些其他图形,这就是为什么第一种方法,删除所有 GraphWidget 的原因。区,比较好。
// save the current brush
QBrush currentBrush = painter.brush();
// draw the old line with the background brush
painter.setBrush(background());
painter.drawLine(oldLine);
// draw the new line with the current brush
painter.setBrush(currentBrush);
painter.drawLine(newLine);

关于qt - 如何在 Qt 中重新绘制新线之前删除/清除以前绘制的线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7625561/

相关文章:

c++ - Qt 5.2 调用 QTableWidget::update 不会导致 QTableWidget::paintEvent

python - 如何在 PyQt/PySide 中表征 createIndex 的 "pointer"参数?

c++ - QT/C++ 关于访问 UI 文件的另一个问题

c++ - 我可以从 ui 实现 QWebView 的方法吗?

android - [ native ] : Using Java functions & 3rd-party libraries in Qt for Android

qt - 在 Ubuntu 中以 root 用户身份启动 Qt 应用程序

c++ - Qt - QPropertyAnimation 中存在错误?

c++ - QT如何在Designer Class上使用模板

python - PyQt4 登录后立即启动系统托盘图标

qt - 如何将信号从一个 qml 发送到另一个 qml