gpt4 book ai didi

c++ - Listwidget 中的右键

转载 作者:行者123 更新时间:2023-11-30 02:35:02 24 4
gpt4 key购买 nike

我有一个方法可以删除 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());
}
}

enter image description here

我有两个问题:

  1. 在我右键单击并出现删除按钮后,如果我单击除删除以外的任何其他地方,整个程序将关闭。不知道为什么。

  2. 正如您在图片中看到的,我没有选择文件,我只是右键单击"file"。显然,这不被视为已选中。所以每次我必须删除时,首先我必须选择一个文件然后右键单击。有什么办法解决这个问题吗?

Edit1:仍然没有找到第二个问题的解决方案。

最佳答案

  1. QMenu::exec如果未选择任何操作,则返回 nullptr。之后您取消引用了空指针 - RightClick->text() 并且您的程序崩溃了。你必须避免这种情况。

  2. QListWidget::selectedItems返回一个临时的 QList(拷贝),您不会通过操作它来更改小部件的状态。使用 QListWidget 的成员函数来删除它的项目。

最终代码为:

if(RightClick && RightClick->text() == "Delete")
{
for(auto item : ui->listWidget->selectedItems())
delete ui->listWidget->takeItem(ui->listWidget->row(item));
}

编辑: 其实我在第二段的回答是不需要的,你有的是对的。在这一点上,我不知道为什么没有选择列表项。

关于c++ - Listwidget 中的右键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34068216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com