Rename an item in Qlistview and Qlistwidget
-
I have an listview where several items present (item1..item9) . I want to remane items using doubleclick . If the renamed item name is similar to the already present item name then an warning message should be dispalyed. I tried this way
connect(ui->listView_messages,SIGNAL(objectNameChanged(QString)),this,SLOT(renameListView(QString))); void Window::on_listView_Messages_doubleClicked() { disconnect(ui->listView_Messages,SIGNAL(objectNameChanged(QString)),this,SLOT(renameListView(QString))); ui->listView_Messages->setEditTriggers(QAbstractItemView::DoubleClicked); connect(ui->listView_Messages,SIGNAL(objectNameChanged(QString)),this,SLOT(renameListView(QString))); } void Window::renameListView(QString str) { for(int i=0;i<messageList.count();i++) { if(messageList.at(i).messageName== str) { QMessageBox *msgBox = new QMessageBox(QMessageBox::Warning,"Warning","Message Name already exists"); msgBox->exec(); } } }
What is the proper way to do it ?
-
Hi,
You need to make your items editable before you can modify them
-
@SGaist
usingsetEditTriggers
cant we make it editable ?
Ok now i have made it editable.
can i rename using thisconnect(ui->listView_messages,SIGNAL(objectNameChanged(QString)),this,SLOT(renameListView(QString))); void Window::renameListView(QString str) { for(int i=0;i<messageList.count();i++) { if(messageList.at(i).messageName== str) { QMessageBox *msgBox = new QMessageBox(QMessageBox::Warning,"Warning","Message Name already exists"); msgBox->exec(); } } }
-
It still depends on the underlaying model. In your case, it seems to be already OK.
IIRC, if you need validation you should implement your own QStyledItemDelegate and add the validation to your editor
-
@SGaist
I am not able to prevent the renaming to the already entered name . -
That's why you should handle that at the editor level not after