Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
How delete list of actions or 1 among this actions
I have a lis of actions
@QList<QAction *> actions = menuRecent_projects->actions();@
How i can delete List or 1 among this actions
I tryed so:
To delete all list
[EDIT: code formatting, Volker]
giesbert last edited by
It depends, how they are created.
Doesn't it work?
QMenu created in the Disigner, QActions created in the program
QActions created in this string
menuRecent_projects->addAction(settings.value("lastProjects/" + QString::number(a)).toString());
goetz last edited by
Problem of your for loop is that this list is "live", i.e. if you remove one action, it is automatically deleted out of the list of the actions, thus the list is shortened by one. You can overcome this by counting backwards, as you then only remove from the end and the yet unvisited indices remain stable (supposed you do not have actions inserted twice or more often).
You might want to use "QMutableListIterator":http://doc.qt.nokia.com/4.7/qmutablelistiterator.html if you want to iterate over the list and want to manipulate it in the meantime.
For deleting all actions, just call "qDeleteAll() ":http://doc.qt.nokia.com/4.7/qtalgorithms.html#qDeleteAll-2 on the list.
You must not use your second attempt! delete  is only allowed for deleting arrays created with new !
Oh, and a last hint: the list indices are 0-based, so your for loops should look like this:
for(int i = 0; i < list.size(); ++i)
You do "i <= list.size()", which gives you an off by one error (segfault or list assertion).
Many thanks for your help!
andre last edited by
Please note, that Volkers warning that items should only be in the list once if you start to delete them, also goes if you use qDeleteAll()! This will result in -a crash- undefined behaviour:
//DON'T DO THIS!!!
actionList << new QAction();
actionList << actionList.at(0); //re-insert the same item twice
qDeleteAll(actionList); // BOOM!
Many thanks for you advance!