我正在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