gpt4 book ai didi

qt - 子类化 QGraphicsView 并设置 drawBackground

转载 作者:行者123 更新时间:2023-12-04 02:28:09 27 4
gpt4 key购买 nike

我正在尝试在 Qt 中创建一个类似于 impoly(来自 matlab)的函数。现在,我有一个 QGraphicsView 的子类,并将虚函数“drawBackground”设置为:

void roiwindow::drawBackground(QPainter *painter, const QRectF &rect)
{
painter->save();
painter->drawImage(rect, *refimage);
painter->restore();
}

这很好用,基本上正是我想要的背景层。现在,我正在尝试添加最终将充当多边形节点的圆圈。我通过使用:
QGraphicsView *view = new QGraphicsView(this);
view->show();
QGraphicsEllipseItem *e1;
e1 = this->addEllipse(20, 20, 30, 30, QColor(0, 0, 0), Qt::white);
e1->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsMovable);

这就是我想要的。但是,有一个问题是,当我单击并拖动椭圆时,椭圆的背景是 *refimage 的缩小版本...这会在屏幕上留下一种条纹,但是当我单击另一个窗口时它会消失或最小化窗口。 QGraphicsItem 是否也调用 drawBackground?如果是这样,它似乎只在拖动项目时调用它。关于如何更好地编码的任何建议?谢谢。

最佳答案

出现条纹是因为您可能将 QGraphicsView 设置为默认值 viewport update mode ,即 QGraphicsView::MinimalViewportUpdate .在这种情况下,您需要 QGraphicsView::FullViewportUpdate .原因是当你移动元素时,它们背后的背景需要重新绘制,但是当你有MinimalViewportUpdate设置,只有项目将被重绘(除非有一个完整的视口(viewport)更新,例如,从最小化/最大化窗口)。

关于qt - 子类化 QGraphicsView 并设置 drawBackground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10709694/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com