0

我创建了一个 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 新值。我需要的是在按下“enter”键后能够捕捉到新值。当项目变为可编辑时,名称为“新建文件夹”,文本被选中,我输入一个新名称,例如“blabla”,然后按 Enter。

我需要抓住“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”

任何想法 ?

4

2 回答 2

0

您需要创建一个派生自 的类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 信号和槽的教程。

于 2014-12-14T10:18:10.143 回答
0

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

QObject::connect(MyTree,&QTreeWidget::itemChanged,[=](QTreeWidgetItem * item,int column) {
    qDebug() << item->text(column);
});

我在这里C++11CONFIG += c++11.pro文件)使用了信号和槽的新语法,但当然,如果你愿意,你可以使用旧语法。

于 2014-12-14T10:18:28.170 回答