我有一個設計的提升圖。遍歷提升圖,我得到了矩形和折線的坐標。通過該坐標,我在 QGraphicsView 上繪制矩形和折線。
現在我想用滑鼠點擊通過場景選擇矩形/折線,并且應該能夠列印它的名稱和其他屬性。它的名稱和其他屬性在 boost graph 節點中。但我不想再次互動提升圖。
因此,當我通過提升圖坐標繪制矩形/折線時,我應該能夠將提升圖節點的一些指標存盤在矩形/折線上,這樣當我單擊矩形/折線時,我可以通過該指標訪問它的名稱和其他屬性。
問題是Is this possible ?
我試過但運行時錯誤。
升壓圖類之一。
class schVertexProps
{
public:
explicit schVertexProps(std::string moduleName = "",std::string name = "",
SCH_VERTEX_TYPE type = SCH_VERTEX_TYPE::SCH_INST_VERTEX,
long crossRefPtr = 0,int vertexLevel = -1,int xPos = 0.0,
int yPos = 0.0,schSymbol* symb = nullptr)
: _moduleName(moduleName),
_name(name),
_type(type),
_crossRefPtr(crossRefPtr),
_vertexLevel(vertexLevel),
_xPos(xPos),
_yPos(yPos),
_symb(symb){
};
在上述所有引數中,我只想存盤 _crossRefPtr (它基本上是一個指標,但存盤為long,使用時會進行型別轉換)
rect = new guiSchematicRect();
while(true)
{
// traversing through boost graph
for(auto iter = verts.begin();iter != verts.end(); iter)
{
// getting co-ordinates of rectangle
QGraphicsRectItem* rectItem = rect->createRect(co-ordinates of rectangle);
rect->_boostRefPtr = iter->_crossRefPtr; // trying to store _crossRefPtr
}
// code somewhat similar for polyline
}
guiSchematicRect.h
class guiSchematicRect : public QGraphicsRectItem
{
........
QGraphicsRectItem* createRect(QRectF& rect);
long _boostRefPtr;
}
當我通過滑鼠單擊場景上的矩形時,我會這樣做:
if(_scene->selectedItems().count() != 0)
{
foreach(QGraphicsItem* currentItem, _scene->selectedItems())
{
QGraphicsRectItem* rItem = qgraphicsitem_cast<QGraphicsRectItem*>(currentItem);
if(rItem)
{
guiSchematicRect* r = reinterpret_cast<guiSchematicRect*>(rItem);
if(r)
{
// I am assuming _boostRefPtr has address of Instance (rectangle)
Instance* i = reinterpret_cast<Instance*>(r->_boostRefPtr);
qDebug()<< i->Name();
}
}
但是aobve方法是錯誤的。出現運行時錯誤(顯示詳細堆疊跟蹤)
所以問題是:
如何在 QGraphicsItem 上存盤指標,以便一旦它們被選中,該指標就會被訪問?
uj5u.com熱心網友回復:
使用 Qt 的動態屬性,檢查QObject::setProperty. 它應該可以解決問題。
但是 AFAIC,我會使用雙精度QMap直接關聯<graph_node, QGraphicsItem> AND <QGraphicsItem, graph_node> - 因此您可以快速搜索這兩個關聯,并且都具有 O(log2(n)) 復雜度。您可以將其存盤為圖形的靜態部分(更好)或獨立(不是最好的主意)。顯然,如果您的圖表已經在 O(log2(n)) 中,那么您不需要這張地圖,而只需要<QGraphicsItem, graph_node>一張。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448142.html
標籤:C qt qt5 qgraphicsview qgraphicsitem
