gpt4 book ai didi

c++ - QGraphicsItem 在场景中的位置始终为 NULL

转载 作者:行者123 更新时间:2023-11-30 04:00:11 25 4
gpt4 key购买 nike

出于测试目的,我尝试在场景中绘制几个矩形并在其中添加一些文本。矩形应该显示在一列中。他们是,但问题是文本不是。所有文本都堆叠在场景的左上角。

此外,pos()scenePos() 总是为每个框和文本返回 (0,0)。

这是负责的代码:

QHash<QString,Picto> Palette::getPics(){
SpriteSheetManager ssm("sprite_zone");
QList<QString> picNames = ssm.finder->allPic(); //Get all string to be displayed
QHash<QString,Picto> picList;

for(int i = 0; i < picNames.size(); i++){
QString picName = picNames.at(i);
QGraphicsTextItem *label = new QGraphicsTextItem();
label->setPlainText(picName);
QGraphicsRectItem *rect = new QGraphicsRectItem();
rect->setRect(0,i*20,50,20);
label->setParentItem(rect);
label->setPos(0,0);
this->addItem(rect);
qDebug()<< rect->pos(); //always return (0,0)
}
return picList;
}

谁能告诉我我做错了什么?

我试过这段代码的几个变体,但我无法解决这个问题。

最佳答案

试试这个:

for(int i = 0; i < 5; i++){
QString picName = "Sample";
QGraphicsTextItem *label = new QGraphicsTextItem();
label->setPlainText(picName);
QGraphicsRectItem *rect = new QGraphicsRectItem();
rect->setRect(0,i*50,50,20);
label->setParentItem(rect);
label->moveBy(0,i*50);//new
//or label->setPos(0,i*50);
this->addItem(rect);
qDebug()<< rect->pos();
}

qDebug()<< rect->rect()<< label->scenePos(); 的输出

QRectF(0,0 50x20) QPointF(0, 0) 
QRectF(0,50 50x20) QPointF(0, 50)
QRectF(0,100 50x20) QPointF(0, 100)
QRectF(0,150 50x20) QPointF(0, 150)
QRectF(0,200 50x20) QPointF(0, 200)

结果:

enter image description here

编辑:

调用 setRect()QGraphicsRectItem 上不改变它的 pos() ,它只是改变了它绘制的矩形的位置,但项目的位置没有改变。所以你可以将 rect 设置为 (0, 0)并调用setPos()将项目移动到您想要的位置。所以下一个代码略有不同,但现场结果完全相同。

for(int i = 0; i < 5; i++){
QString picName = "Sample";
QGraphicsRectItem *rect = new QGraphicsRectItem();
QGraphicsTextItem *label = new QGraphicsTextItem();
label->setPlainText(picName);
rect->setRect(0,0,50,20);
rect->setPos(0,i*50);
//rect->moveBy(0,i*50);
label->setParentItem(rect);
//label->setPos(0,i*50);
this->addItem(rect);
}

在这种情况下 pos()返回正确的值

关于c++ - QGraphicsItem 在场景中的位置始终为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26462343/

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