将 QGraphicsItem::pos() 转换为场景坐标

时间:2021-07-22 12:20:03

标签: c++ qt coordinates qgraphicsscene qgraphicsitem

我有一个自定义的 DECLARE @SchemaName sysname = N'dbo', @TableName sysname = N'[WARNING WARNING, INJECTION ALERT!!!]'; --This solution doesn't suffer from injection any more. DECLARE @SQL nvarchar(MAX) = N' WITH XMLNAMESPACES (''https://www.my.website.'' as ns) SELECT Q.A AS [@A], Q.B AS [@B], Q.C AS [@C], D.D AS [@D], N.E AS [@E], CONVERT(char(10), N.CR, 126) AS [@DN], ''mess'' AS [TN/@Z], @T2 AS [TN/T] ,(SELECT * FROM ' +QUOTENAME(@SchemaName) + N'.' + QUOTENAME(@TableName) +' FOR XML PATH (''Not''),type) FROM [DB].[dbo].[Q] AS Q LEFT JOIN [DB].[dbo].[D] AS D ON Q.Id=D.Id LEFT JOIN [DB].[dbo].[N] AS N ON D.DoctId=N.DocId WHERE Q.Id=@InboxID FOR XML PATH (''Not'');'; --PRINT @SQL; EXEC sys.sp_executesql @SQL, N'@T2 int, @InboxID int', @T2, @InboxID; --Data types guessed. ,它像这样覆盖 nodejs@node69107 ~ $ ls log nodejs.lock package-lock.json ROOT nodejs@node69107 ~ $ ls ROOT esg index.html node_modules package.json package-lock.json README.md server.js src nodejs@node69107 ~ $ npm install npm ERR! code ENOENT npm ERR! syscall open npm ERR! path /home/jelastic/package.json npm ERR! errno -2 npm ERR! enoent ENOENT: no such file or directory, open '/home/jelastic/package.json' npm ERR! enoent This is related to npm not being able to find a file. npm ERR! enoent npm ERR! A complete log of this run can be found in: npm ERR! /home/jelastic/.npm/_logs/2021-07-22T12_17_18_911Z-debug.log

QGraphicsItem

QGraphicsItem::itemChange() 的 (0, 0) 位于创建项目的位置,而 QVariant CustomItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) { if (change == QGraphicsItem::ItemPositionChange) { QPointF newPos = value.toPointF(); QRectF rect = mapRectToScene(boundingRect()); qDebug() << "newPos" << newPos; qDebug() << "rect" << rect; } return QGraphicsItem::itemChange(change, value); } 的 (0, 0) 位于场景的左上角;

我想转换 newPos,使其与 rect 位于相同的坐标系中。 我尝试了 newPos 中的所有 rect / mapTo 函数,但没有任何效果。

有人可以帮忙吗?谢谢

1 个答案:

答案 0 :(得分:0)

好的,我想我已经解决了我的问题。我忘记提及的是我的项目是这样初始化的:

auto item = new CustomItem(QPolygonF(QRectF(70, 70, 100, 100)));

我为解决我的问题所做的是首先在 (0, 0) 处初始化项目,然后使用 QGraphicsItem::moveBy() 而不是为我的项目的构造函数提供位置。

auto item = new CustomItem(QPolygonF(QRectF(0, 0, 100, 100)));
item->moveBy(70, 70);

现在 newPosrectitemChange() 函数中给我相同的坐标。

相关问题