pos機菜單詳解,Qt右鍵菜單的5種方案

 新聞資訊  |   2023-04-24 09:46  |  投稿人:pos機之家

網上有很多關于pos機菜單詳解,Qt右鍵菜單的5種方案的知識,也有很多人為大家解答關于pos機菜單詳解的問題,今天pos機之家(www.tonybus.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、pos機菜單詳解

pos機菜單詳解

學習了QT很久,下面總結了5種實現右鍵菜單的方法(以QListWidget為例):

下面5種方法選其一即可.當然越簡單越好啦!

1.重寫QListWidget的virtual void mousePressEvent(QMouseEvent *event);鼠標點擊函數.

2.重寫QListWidget的virtual void contextMenuEvent(QContextMenuEvent *event);右鍵菜單函數.

3.在使用QListWidget的窗口中,virtual void mousePressEvent(QMouseEvent *event);鼠標點擊函數.

4.修改QListWidget的右鍵菜單策略.

5.添加事件過濾器.

1.重寫QListWidget.

//"QMyListWidget.h"#ifndef QMYLISTWIDGET_H#define QMYLISTWIDGET_H#include <QListWidget>#include <QMenu>#include <QAction>#include <QContextMenuEvent>#include <QMouseEvent>class QMyListWidget : public QListWidget{ Q_OBJECTpublic: QMyListWidget(QWidget *parent); ~QMyListWidget();protected: void mousePressEvent(QMouseEvent *event);private: QMenu *m_contextMenu; QAction *m_addAction; QAction *m_delAction;};#endif // QMYLISTWIDGET_H//這里是QMyListWidget的實現.//"QMyListWidget.cpp"#include "QMyListWidget.h"QMyListWidget::QMyListWidget(QWidget *parent): QListWidget(parent){ //創建一個菜單,后面不在解釋. m_contextMenu = new QMenu; m_addAction = new QAction("add Item",this); m_delAction = new QAction("del Item",this); m_contextMenu->addAction(m_addAction); m_contextMenu->addAction(m_delAction);}QMyListWidget::~QMyListWidget(){}void QMyListWidget::mousePressEvent(QMouseEvent *event){ //確保右鍵點擊,然后跳出菜單. if (event->button() == Qt::RightButton) { m_contextMenu->exec(event->globalPos()); } //要繼續保留QListWidget原有的點擊事件. QListWidget::mousePressEvent(event);}

當重寫后,別忘記把QListWidget部件提示為你的QMyListWidget部件,提升方法看上篇博客.

2.重寫virtual void contextMenuEvent(QContextMenuEvent *event);

//"QMyListWidget.h"頭文件基本一致,所以就不放上來了.//下面是"QMyListWidget.cpp"的代碼.void QMyListWidget::contextMenuEvent(QContextMenuEvent *event){ //讓菜單移動到鼠標位置并顯示. m_contextMenu->exec(event->globalPos());}

3.在原窗口中重寫void contextMenuEvent(QContextMenuEvent event);或者void mousePressEvent(QMouseEvent *event);

//以下為"c.cpp"的代碼:c::c(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this); ui.listWidget->addItem("zx"); m_contextMenu = new QMenu; m_addAction = new QAction("add Item", this); m_delAction = new QAction("del Item", this); m_contextMenu->addAction(m_addAction); m_contextMenu->addAction(m_delAction);}c::~c(){}void c::contextMenuEvent(QContextMenuEvent *event){ //把鼠標位置轉化成相對于QWidget的位置,然后判斷是否在QListWidget內. QPoint i = ui.listWidget->mapFromGlobal(event->globalPos()); Qrect rect(QPoint(0,0),ui.listWidget->size()); if (rect.contains(i)) { m_contextMenu->exec(event->globalPos()); }}*/

4.設置QListWidget的右鍵菜單策略.

c::c(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this); //修改策略. ui.listWidget->setContextMenuPolicy(Qt::CustomContextMenu); ui.listWidget->addItem("zx"); m_contextMenu = new QMenu; m_addAction = new QAction("add Item", this); m_delAction = new QAction("del Item", this); m_contextMenu->addAction(m_addAction); m_contextMenu->addAction(m_delAction); //和該策略對應的信號,showListWidgetMenuSlot為自己定義的槽函數. connect(ui.listWidget, SIGNAL(customContextMenuRequested(QPoint)),this, SLOT(showListWidgetMenuSlot(QPoint)));}c::~c(){}void c::showListWidgetMenuSlot(QPoint pos){ m_contextMenu->exec(QCursor::pos());}

5.使用事件過濾器.假設在窗口中.因為如果在重寫類中使用,感覺沒什么必要.

c::c(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this); ui.listWidget->addItem("zx"); //加入事件過濾器. ui.listWidget->installEventFilter(this); //重要 m_contextMenu = new QMenu; m_addAction = new QAction("add Item", ui.listWidget); m_delAction = new QAction("del Item", ui.listWidget); m_contextMenu->addAction(m_addAction); m_contextMenu->addAction(m_delAction);}c::~c(){}ool c::eventFilter(QObject *o, QEvent *event){ if (o == ui.listWidget) { if (event->type() == QEvent::ContextMenu) { m_contextMenu->exec(QCursor::pos());//重要 return true; } } return QObject::eventFilter(o,event); }

原文鏈接:https://blog.csdn.net/qq_37233607/article/details/78649151

以上就是關于pos機菜單詳解,Qt右鍵菜單的5種方案的知識,后面我們會繼續為大家整理關于pos機菜單詳解的知識,希望能夠幫助到大家!

轉發請帶上網址:http://www.tonybus.com/news/32669.html

你可能會喜歡:

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 babsan@163.com 舉報,一經查實,本站將立刻刪除。