[英]How to get the new value of a qtreewidgetitem after entering new value
我创建了一个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”后,我可以在界面上输入新值。 我需要的是在按“ Enter”键后能够捕获新值。 当项目变为可编辑状态时,名称为“ New Folder”,选择文本,然后输入新名称,例如“ 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”
任何想法 ?
您需要创建一个派生自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
( .pro
文件中的CONFIG += c++11
)以及信号和插槽的新语法 ,但是如果需要,您当然可以使用旧语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.