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

Popular posts from this blog

authentication - Mongodb revoke acccess to connect test database -

r - Update two sets of radiobuttons reactively - shiny -

ios - Realm over CoreData should I use NSFetchedResultController or a Dictionary? -