我创建了一个treewidget,并添加了一些可编辑的treewidgetitems。
我的目标是在输入项目后抓住项目的新价值。
以下是代码:
QTreeWidgetItem* child = new QTreeWidgetItem();
child->setText(0, "New Folder");
child->setText(1, "--");
child->setText(2, "--");
child->setFlags(child->flags() | Qt::ItemIsEditable);
item[0]->addChild(child);
item[0]->setExpanded(true);
MyTree->editItem(child);
MyTree->setCurrentItem(child);
...
当设置“editItem”时,我可以在界面上输入新值的manuel。我需要的是能够在按下“输入”键后捕获新值。当项目可编辑时,名称为“新建文件夹”,文本被选中,我输入一个新名称,如“blabla”,然后按回车。
我需要抓住“blabla”。我尝试过使用以下代码:
....
MyTree->setCurrentItem(child);
QList<QTreeWidgetItem *> item;
item = MyTree->selectedItems();
QString str = item[0]->text(0);
QByteArray latin_str = str.toLatin1();
char *utf8_text = latin_str.data();
但utf8_text报告“新文件夹”而不是“blabla”
有什么想法吗?
答案 0 :(得分:0)
您需要创建一个源自QObject
的类,并聆听QTreeWidget
的{{1}}信号。例如:
itemChanged
N.B。:我还没有测试过上面的代码,它只是一个例子。有很多关于使用Qt信号和插槽的教程。
答案 1 :(得分:0)
使用QTreeWidget::itemChanged
信号和信号/插槽。小工作实例:
QObject::connect(MyTree,&QTreeWidget::itemChanged,[=](QTreeWidgetItem * item,int column) {
qDebug() << item->text(column);
});
我在这里使用C++11
(CONFIG += c++11
到.pro
文件)和new syntax of signals and slots,但当然如果需要,您可以使用旧语法。