如何在输入新值后获取qtreewidgetitem的新值

时间:2014-12-14 10:09:46

标签: c++ qt qtreewidget qtreewidgetitem

我创建了一个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”

有什么想法吗?

2 个答案:

答案 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++11CONFIG += c++11.pro文件)和new syntax of signals and slots,但当然如果需要,您可以使用旧语法。