版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/84581437
源码如下:
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected slots:
void onContextMenu(const QPoint &pt);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMenu>
#include <QCursor>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->listWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onContextMenu(QPoint)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::onContextMenu(const QPoint &pt)
{
qDebug()<< "QCursor::pos():" << QCursor::pos();
qDebug()<< "pt:" << pt;
qDebug()<< "ui->listWidget->mapToGlobal(pt):" << ui->listWidget->mapToGlobal(pt);
qDebug()<< "----------**********----------";
QMenu menu;
menu.addAction("12345");
menu.addAction("67890");
//menu.exec(QCursor::pos());
menu.exec(ui->listWidget->mapToGlobal(pt));
}
打印的数据如下:
视觉上的效果如下:
使用ui->listWidget->mapToGlobal(pt)
使用QCursor::pos()的效果如下:
差别还是很大的,是不是!!