我有一个qgraphicsitem的子类来创建一组项目,这些项目将进入另一个子类并进入一个子类化场景。
当通过子类进行转换时,我可以使用良好的场景坐标获得项目,但是使用item-> setPos(); item.pos()=(0,0)或错误的位置
1)在这里,我得到了项目坐标,但是添加时位置错误。 2)在这里,我得到了物料坐标=(0,0),但是物料处于良好的位置。
void addExtChordseistris()
{
QPoint p = QCursor::pos();
for(QGraphicsView *view: views()){
QWidget *viewport = view->viewport();
QRect vr = viewport->rect();
QPoint vp = viewport->mapFromGlobal(p);
if(vr.contains(vp)){
QPointF sp = view->mapToScene(vp);
chord *itemdos = new chord();
addItem(itemdos);
itemdos->addchorddos(sp);
itemdos->setPos(sp); // -> using this or not
}
}
}
这就是给我pos。()=(0,0)。
void debugSceneItemscuatro()
{
QList<QGraphicsItem *> allitems = items();
foreach(auto item, allitems) {
if(item->type() == chord::Type){
qDebug() << item->pos();
}
}
}
这是添加项目的方式:
#include "chord.h"
#include "note.h"
chord::chord()
{
Pressed = false;
setFlag(ItemIsMovable);
// QList<QGraphicsItem> coso;
}
QRectF chord::boundingRect() const
{
// outer most edges
return QRectF(0,0,100,100);
}
void chord::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QRectF rect = boundingRect();
if(Pressed)
{
QPen pen(Qt::red, 3);
painter->setPen(pen);
// painter->drawEllipse(rect);
}
else
{
QPen pen(Qt::black, 3);
painter->setPen(pen);
// painter->drawRect(rect);
}
}
//[1] Add chord
void chord::addchord(QPointF sp)
{
// scene()->addLine(sp.x(), sp.y(), sp.x()+10, sp.y()+10);
auto *line = scene()->addLine(sp.x(), sp.y(), sp.x() + 10, sp.y() + 10);
line->setParentItem(this);
QList<int> midics = {10, 30, 40};
for(int i = 0; i < midics.length(); i++)
{
QGraphicsSimpleTextItem *item = new QGraphicsSimpleTextItem("n", this);
item->setFont(QFont("omheads", 20));
item->setPos(sp.x(), sp.y()+midics[i]);
// scene()->addItem(item);
coso.append(item);
}
}
//[1] Add chord
void chord::addchorddos(QPointF sp)
{
// scene()->addLine(sp.x(), sp.y(), sp.x()+10, sp.y()+10);
auto *line = scene()->addLine(sp.x(), sp.y(), sp.x() + 10, sp.y() + 10);
line->setParentItem(this);
QList<int> midics = {0, 10, 30, 40};
for(int i = 0; i < midics.length(); i++)
{
note *item = new note();
item->setParentItem(this);
QPointF ssp = {sp.x(), sp.y()+midics[i]};
item->addnote(ssp);
// item->setPos(sp.x(), sp.y()+midics[i]);
// scene()->addItem(item);
// coso.append(item);
}
}
//void chord::getobjects(QGraphicsItem item)
//{
// return coso;
//}
QList<QGraphicsItem*> chord::retrievedata() const
{
return coso;
}
void chord::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Pressed = true;
update();
QGraphicsItem::mousePressEvent(event);
}
void chord::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Pressed = false;
update();
QGraphicsItem::mouseReleaseEvent(event);
}
另一个子类,..
无效注释:: addnote(QPointF ssp) {
QGraphicsSimpleTextItem *item = new QGraphicsSimpleTextItem("n", this);
item->setFont(QFont("omheads", 20));
item->setPos(ssp.x(), ssp.y());
}
谢谢,...也许我做错了方法,感谢您的任何想法,解决方案...! :-)