如何在QTreeWidget中获取指针指针?

时间:2016-10-28 18:22:21

标签: c++ qt

我创建了一个QTreeWidget,并使用struct data(myObj.name,myObj.DOB,myObj.age等)填充它。

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

我使用指针创建列表,我只需要弄清楚当我在列表中选择时如何检索这些指针。

3 个答案:

答案 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;