c++ - QTreeWidget catch item editing finished with no text change -
i'm developing qt application qtreewidget on qt designer form. user can press add-new-item button , new item appear default name, after user must enter item's name.
so code:
void myformclass::on_addnewitembutton_clicked() { auto newitem = new qtreewidgetitem({ _defaultname }); newitem->setflags(newitem->flags() | qt::itemiseditable); ui->tree->addtoplevelitem(newitem); ui->tree->edititem(newitem); } in myformclass catch itemchanged signal operations newly created item , it's name:
void myformclass::on_tree_itemchanged(qtreewidgetitem *item, int column) { if (item->text(0).isempty()) { ... } else { ... } } and works fine except case when user doesn't change anything , press enter/left-click somewhere. case qtreewidget [probably] check item has not been changed , not emits proper signal.
so ideas how can create new item, allow user edit , catch edit result (i.e. same default)? maybe using qtreeview help?
qt 5.4.2, c++11, linux/windows platforms
bonus questions: why qt designed way? mean, isn't affair check whether item has changed or not? ok, signal called itemchanged, why there no editfinished signal or something?
i guess right scope apply approach qtreewidget. so, can inherit qtreewidget mytreewidget.
ui->tree = new mytreewidget(this); // or how initialized there million mysteries in our work field. can try , trap culprit when thing not working want work. when running in qt widget behaving not way expect it, trace does:
bool mytreewidget::event(qevent* pevent) { qdebug() << pevent; // parent class method call return qtreewidget::event(pevent); } and log recorded specific case either try overload specific event (better , safer) or in overloaded generic event handler:
bool mytreewidget::event(qevent* pevent) { // suppose 'culprit' event if (pevent->type() == qevent::windowdeactivate) dotherightthinghere(); // expected done // parent class method call return qtreewidget::event(pevent); } the same approach can applied event filter.
Comments
Post a Comment