我有一种删除列表小部件上文件列表的方法:
void MainWindow::on_listWidget_clicked(const QModelIndex &index)
{
qDeleteAll(ui->listWidget->selectedItems());
}
但是我想实现一个右键单击按钮,它提供了一个删除它的选项。我不知道该怎么办。
答案 0 :(得分:2)
您需要继承QListWidget并捕获鼠标单击事件
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);
}
用项目做任何你喜欢的事情:)
答案 1 :(得分:2)
在Windows上,右键单击可能根本不会导致QMouseEvent
。
在我的Linux系统上,仅pressEvent
被触发,但没有releaseEvent
。
你可以实现`void contextMenuEvent(QContextMenuEvent * e)&#39;这是在所有系统上启动的。
像这样:
/*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()
。但上述方法适用于默认属性设置。
答案 2 :(得分:0)
如果您需要右键单击上下文菜单,请使用:How to add a custom right-click menu to a webpage?
如果您只想检测右键单击鼠标事件,请使用:How can I capture the right-click event in JavaScript?(但请注意,并非所有人都有右键单击或知道如何使用它)
foo()