我有一种方法可以删除QListWidget
上的文件列表:
void MainWindow::ProvideContextMenu(const QPoint &pos)
{
QPoint item = ui->listWidget->mapToGlobal(pos);
QMenu submenu;
submenu.addAction("Delete");
QAction* RightClick = submenu.exec(item);
if(RightClick->text().contains("Delete"))
{
qDeleteAll(ui->listWidget->selectedItems());
}
}
我有两个问题:
右键单击并显示删除按钮后,如果单击删除以外的任何其他位置,整个程序将关闭。不知道为什么。
正如您在图片中看到的那样,我没有选择文件,我只需右键单击"在文件"上。显然,这并不是选择的。所以每次我必须删除,首先我必须选择一个文件,然后右键单击。有没有办法解决这个问题?
编辑1:仍未找到第二个问题的解决方案。
答案 0 :(得分:3)
QMenu::exec
会返回nullptr
。您之后取消引用空指针 - RightClick->text()
并且您的程序崩溃了。你必须避免这种情况。
QListWidget::selectedItems
返回临时QList
(副本),您不会通过操纵来更改窗口小部件的状态。使用QListWidget
的成员函数删除其项目。
最终代码是:
if(RightClick && RightClick->text() == "Delete")
{
for(auto item : ui->listWidget->selectedItems())
delete ui->listWidget->takeItem(ui->listWidget->row(item));
}
编辑:实际上,我在第二段中回答的内容不是必需的,而且你所拥有的是正确的。此时,我不知道为什么列表项没有被选中。