2015-12-03 3 views
1

У меня есть метод, чтобы удалить список файлов на QListWidget:Правая кнопка в Listwidget

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. Как вы можете видеть на картинке, я не выбрал файл, просто щелкнув правой кнопкой мыши по файлу. По-видимому, это не считается выбранным. Поэтому каждый раз, когда я должен удалить, сначала я должен выбрать файл, затем щелкнуть правой кнопкой мыши. Есть ли способ обойти это?

Редактировать 1: Все еще не найдено решения второй проблемы.

ответ

3
  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)); 
} 

Edit: На самом деле, что я ответил на втором пункте не требуется и то, что вы имели права. На данный момент я не знаю, почему элемент списка не выбран.

+0

Спасибо! вы полностью решили проблему остановки программы, но я не могу исправить проблему с нажатием. – user5603723

+0

Как вы подключили 'ProvideContextMenu'? – LogicStuff

+0

connect (ui-> listWidgetOutput, SIGNAL (customContextMenuRequested (const QPoint &)), это, SLOT (ProvideContextMenu (const QPoint &))); – user5603723

Смежные вопросы