我正在Qt Designer窗体上用QTreeWidget开发Qt应用程序。用户可以按添加新项目按钮,新项目将以默认名称出现,之后用户必须输入项目名称。QTreeWidget捕获项目编辑完成后没有文本更改
所以这是我的代码:
void MyFormClass::on_addNewItemButton_clicked()
{
auto newItem = new QTreeWidgetItem({ _defaultName });
newItem->setFlags(newItem->flags() | Qt::ItemIsEditable);
ui->tree->addTopLevelItem(newItem);
ui->tree->editItem(newItem);
}
在MyFormClass我也搭上itemChanged信号做一些操作与新建项目和它的名字:
void MyFormClass::on_tree_itemChanged(QTreeWidgetItem *item, int column)
{
if (item->text(0).isEmpty()) {
...
} else {
...
}
}
,一切工作正常,除了情况下,当用户不会更改任何内容,只需按Enter键/在某处点击左键。这种情况下QTreeWidget [可能]检查该项目没有真正改变,并没有发出适当的信号。
因此,任何想法如何我可以创建新的项目,然后让用户立即编辑它,并最终捕获任何编辑结果(即与默认相同)?也许使用QTreeView将有所帮助?
的Qt 5.4.2,C++ 11的Linux/Windows平台
奖金的问题:为什么Qt的这样设计?我的意思是,检查项目是否发生变化是不是我的事情?好的,信号被称为itemChanged,但为什么没有editFinished信号或什么?
甚至更好。当然,陷害一个事件只会显示“为什么?”但这并不总是回答“如何?” – AlexanderVX