滚动 QGraphicsView 和 QGraphicsScene
Posted
技术标签:
【中文标题】滚动 QGraphicsView 和 QGraphicsScene【英文标题】:Scrolling QGraphicsView and QGraphicsScene 【发布时间】:2013-02-18 18:53:20 【问题描述】:我在 GUI 上将 QGraphicsScene 实例设置为 QGraphicsView,并启用了滚动条并更新了全视图端口。但是,当我滚动图形视图时,添加到 qgraphics 场景的项目在某些时候消失了,尽管它们已正确添加到代码中并且预计会在滚动时显示(从 QGraphicsItem 继承的自定义类):
class CSquare : public QObject, public QGraphicsItem
paint方法实现如下:
void CSquare::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
static int sz;
painter->setFont(fnt_);
painter->fillRect(this->r,this->br);
painter->drawRect(this->r);
//painter->drawText(this->p,this->txt);
if (txt == "")
return;
if (fnt_.pixelSize()>0)
sz = fnt_.pixelSize();
else
if (fnt_.pointSize()>0)
sz = fnt_.pointSize();
else
if (fnt_.pointSizeF()>0)
sz = fnt_.pointSizeF();
switch (this->al_flag)
case 1:
painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignRight,this->txt);
break;
case 2:
//painter->drawText(this->r,Qt::AlignLeft,this->txt);
painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignLeft,this->txt);
break;
case 3:
//painter->drawText(this->r,Qt::AlignCenter,this->txt);
painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignCenter,this->txt);
break;
case 4:
//painter->drawText(this->r,Qt::AlignJustify,this->txt);
painter->drawText(this->p.x(),this->p.y(),sz*txt.size(),2*sz,Qt::AlignJustify,this->txt);
break;
您可以在此视频屏幕投射上看到它们在应用程序运行时是如何消失的:
https://www.box.com/s/h4h94×1avgay1crzvyzx
有人可以提示是什么问题,如何解决图形项不会在视图上消失?
提前致谢。
【问题讨论】:
box.com 链接已损坏 【参考方案1】:是的,对不起。问题已经解决了: 问题出在继承类中的自定义函数中:
QRectF boundingRect() const;
这应该返回有效的矩形。现在我在我的项目中修复了这个问题,我将删除视频。
感谢您的关注。
【讨论】:
以上是关于滚动 QGraphicsView 和 QGraphicsScene的主要内容,如果未能解决你的问题,请参考以下文章