我创建了一个QTreeWidget,并使用struct data(myObj.name,myObj.DOB,myObj.age等)填充它。
当我选择窗口小部件中的某个项目时,我需要获取与该选择关联的指针数据,以便在其他地方显示它。
我使用指针创建列表,我只需要弄清楚当我在列表中选择时如何检索这些指针。
答案 0 :(得分:0)
要访问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项目),
使用上面连接的信号和插槽,单击我的一个树项会导致执行以下方法,
void MainWindow::print_item(QModelIndex index){
qDebug()<<"Item :"<<index.data().toString();
}
正如您所看到的,'clicked'信号传递的参数是一个QModelIndex,然后我在上面的方法中使用它来访问我的树项目中的数据。
答案 1 :(得分:0)
由于我在这里看到树小部件而不是抽象模型,我猜你在小部件中使用了列。例如,您的节点有三列:名称(0列),DOB(1列)和年龄(2列)。
如果是这种情况,那么简单的方法是:
QList<QTreeWidgetItem *> QlistTreeWId = YourTree->selectedItems();
检查列表大小,如果大小存在,则
yourObject.name = QlistTreeWId [0].text(0); //name column.
yourObject.DOB= QlistTreeWId [0].text(1); //DOB column.
yourObject.age= QlistTreeWId [0].text(2); //Age column.
希望这有帮助。
答案 2 :(得分:0)
所以我能够通过使用QMap实现我所需要的。
QMap<QTreeWidgetItem*, myObject*> myMap_container;//declared in .h
然后在我的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;