2015-12-02 14 views
1

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

void MainWindow::on_listWidget_clicked(const QModelIndex &index) 
{   
    qDeleteAll(ui->listWidget->selectedItems()); 
} 

Но я хочу, чтобы реализовать кнопку кликните правой кнопкой мыши, где он дает возможность удалить его. Я не уверен, как действовать дальше.

+0

Вы посмотрели на это http://stackoverflow.com/questions/31383519/qt-rightclick-on-qlistwidget-opens-contextmenu-and-delete-item – demonplus

+0

Я сделал все, что упоминалось в этом, было очень просто. Но это не работает. – user5603723

ответ

1

Вы должны наследовать QList Виджет и поймать мыши событие

mylistwidget.h:

#ifndef MYLISTWIDGET_H 
    #define MYLISTWIDGET_H 

    #include <QListWidget> 

    class MyListWidget : public QListWidget 
    { 
     Q_OBJECT 
    public: 
     MyListWidget(QWidget *parent = 0); 
     ~MyListWidget(); 
    private: 
     void mousePressEvent(QMouseEvent *event); 
    signals: 
     void rightClick(QPoint* pos); 
    }; 

    #endif // MYLISTWIDGET_H 

mylistwidget.cpp:

#include "mylistwidget.h" 

    #include <QMouseEvent> 

    MyListWidget::MyListWidget(QWidget *parent) : 
     QListWidget(parent) 
    { 

    } 

    MyListWidget::~MyListWidget() 
    { 

    } 

    void MyListWidget::mousePressEvent(QMouseEvent *event) 
    { 
     if(event->button() == Qt::RightButton){ 
      emit rightClick(&event->pos()); 
     } else { 
      QListWidget::mousePressEvent(event); 
     } 
    } 

создать объект и подключить к слоту:

MyListWidget* listWidget = new MyListWidget(this); 
connect(listWidget,SIGNAL(rightClick(QPoint*)), 
     this,SLOT(onRightClick(QPoint*))); 

получить деталь в в слоте:

void onRightClick(QPoint *pos) 
{ 
    QListWidgetItem* item = listWidget->itemAt(pos); 
} 

делать все, что вам нравится с пунктом :)

0
  1. Если вы хотите контекстное меню правой кнопки мыши, используйте: How to add a custom right-click menu to a webpage?

  2. Если вы просто хотите, чтобы обнаружить правая кнопка мыши событие мыши используйте: How can I capture the right-click event in JavaScript? (Но обратите внимание, что не все есть щелкните правой кнопкой мыши или знает, как использовать его)


function rightclick() { 
    var rightclick; 
    var e = window.event; 
    if (e.which) rightclick = (e.which == 3); 
    else if (e.button) rightclick = (e.button == 2); 
    alert(rightclick); // true or false, you can trap right click here by if comparison 
} 
+0

Я прошу прощения за неправильный тег, не имеет ничего общего с javascript. это полностью QT – user5603723

2

В Windows правая кнопка не может вызвать QMouseEvent вообще. В моей системе Linux только pressEvent уволен, но нет releaseEvent.

Вы можете реализовать «void contextMenuEvent (QContextMenuEvent * e)», который запускается во всех системах.

Как это:

/*virtual*/ void YourListWidgetDerivedClass::contextMenuEvent(QContextMenuEvent * e) 
{ 
    // if you only want the mouse context events (like right click) 
    if(e->reason != QContextMenuEvent::Mouse) return; 

    // get the item unter the mouse cursor 
    QListWidgetItem * clickedItem = itemAt(e->pos()); 

    // do what you like here 
    // e.g. show a dialog to ask whether the item should be deleted 
    // or show a widget with delete button (you can position it freely with setGeometry(...)) 
    // etc. 
} 

При изменении контекста политики меню вашего списка с помощью setContextMenuPolicy в Qt::CustomContextMenu, сигнал customContextMenuRequested() испускается, если нужно это поведение. Но вышеприведенный подход работает с настройкой свойства по умолчанию.