如何获得指针在QTreeWidget索引

How to get Pointer to Index in QTreeWidget?

本文关键字:QTreeWidget 索引 指针 何获得      更新时间:2023-10-16

我已经创建了一个QTreeWidget,并用结构数据(myObj.name, myObj.name, myObj.name)填充它。myObj强加于人。年龄,等等)。

当我在小部件中选择一个项目时,我需要获取与该选择相关联的指针数据,以便在其他地方显示它。

我用指针创建了列表,我只需要弄清楚当我在列表上选择时如何反过来检索这些指针。

所以我能够通过使用QMap实现我所需要的。

QMap<QTreeWidgetItem*, myObject*> myMap_container;//declared in .h
然后在my cpp:
    void MainWindow::on_myTree_itemClicked(QTreeWidgetItem *item, int column){
       myObject* rowData = myMap_container[item];
}

从那里,我能够访问我的结构体数据的全部已分配如下:

cout << rowData.Name << endl;
cout << rowData.Age << endl;
cout << rowData.SSN<< endl;
cout << rowData.FavColor<< endl;

要访问QTreeWidget(或者说是QTreeWidget免费提供的预定义树模型)中的数据,您可以利用QTreeWidget在用户交互时发出的信号之一。即点击(QModelIndex)。

QTreeWidget文档列出了所有可用的信号:(http://doc.qt.io/qt-5/qtreewidget.html#details)

例如:

connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(print_item(QModelIndex)));

其中'this'类型为QTreeWidget。(我已经在树结构中填充了许多QString项),

有了上面连接的Signal和Slot,单击我的树项目之一会导致执行以下方法,

void MainWindow::print_item(QModelIndex index){
    qDebug()<<"Item :"<<index.data().toString();
} 

可以看到,'clicked'信号传递的参数是一个QModelIndex,然后我在上面的方法中使用它来访问树项中的数据。

当我在这里看到树小部件而不是抽象模型时,我猜您正在小部件中使用列。例如,您的节点有三列:name(0列),DOB(1列)和age(2列)。

如果是这种情况,简单的方法是:

QList<QTreeWidgetItem *> QlistTreeWId = YourTree->selectedItems();

检查列表大小,如果size存在,则

yourObject.name = QlistTreeWId [0].text(0); //name column.
yourObject.DOB= QlistTreeWId [0].text(1); //DOB column.
yourObject.age= QlistTreeWId [0].text(2); //Age column.