Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 输入新值后如何获取qtreewidgetitem的新值_C++_Qt_Qtreewidget_Qtreewidgetitem - Fatal编程技术网

C++ 输入新值后如何获取qtreewidgetitem的新值

C++ 输入新值后如何获取qtreewidgetitem的新值,c++,qt,qtreewidget,qtreewidgetitem,C++,Qt,Qtreewidget,Qtreewidgetitem,我创建了一个树状图,并添加了一些可编辑的树状图 现在,我的目标是在输入项后捕捉该项的新值 代码如下: QTreeWidgetItem* child = new QTreeWidgetItem(); child->setText(0, "New Folder"); child->setText(1, "--"); child->setText(2, "--"); child->setFlags(child->flags() |

我创建了一个树状图,并添加了一些可编辑的树状图

现在,我的目标是在输入项后捕捉该项的新值

代码如下:

    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新值。我需要的是能够在按下enter键后捕获新值。当项目变得可编辑时,名称为New Folder,文本被选中,我输入一个新名称,如blabla,然后按enter键

我需要抓住那些废话。我已尝试使用以下代码:

    ....
    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_文本报告是一个新文件夹,而不是blabla


有什么想法吗?

您需要创建一个从QObject派生的类,并监听QTreeWidget的itemChanged信号。例如:

class MyWidget : public QWidget
{
    Q_OBJECT;
public:
    MyWidget(QWidget * parent = nullptr) : QWidget(parent)
    {
        // Create sub-widgets, including m_tree

        // Connect up signal and slot
        connect(&m_tree, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(treeItemChanged(QTreeWidgetItem*, int)));
    }

public slots:
    void treeItemChanged(QTreeWidgetItem * item, int column);
    // ...

private:
    QTreeWidget m_tree;
};
注意:我没有测试上面的代码,这只是一个例子。关于Qt信号和插槽的使用有很多教程。

使用QTreeWidget::itemChanged信号和信号/插槽。小型工作示例:

QObject::connect(MyTree,&QTreeWidget::itemChanged,[=](QTreeWidgetItem * item,int column) {
    qDebug() << item->text(column);
});
我在这里使用了C++11 CONFIG+=C++11 to.pro文件和,但如果需要,当然可以使用旧语法