網(wǎng)上有很多關(guān)于pos機(jī)菜單詳解,Qt右鍵菜單的5種方案的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)菜單詳解的問題,今天pos機(jī)之家(www.tjfsxbj.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)菜單詳解
學(xué)習(xí)了QT很久,下面總結(jié)了5種實(shí)現(xiàn)右鍵菜單的方法(以QListWidget為例):
下面5種方法選其一即可.當(dāng)然越簡(jiǎn)單越好啦!
1.重寫QListWidget的virtual void mousePressEvent(QMouseEvent *event);鼠標(biāo)點(diǎn)擊函數(shù).
2.重寫QListWidget的virtual void contextMenuEvent(QContextMenuEvent *event);右鍵菜單函數(shù).
3.在使用QListWidget的窗口中,virtual void mousePressEvent(QMouseEvent *event);鼠標(biāo)點(diǎn)擊函數(shù).
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的實(shí)現(xiàn).//"QMyListWidget.cpp"#include "QMyListWidget.h"QMyListWidget::QMyListWidget(QWidget *parent): QListWidget(parent){ //創(chuàng)建一個(gè)菜單,后面不在解釋. 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){ //確保右鍵點(diǎn)擊,然后跳出菜單. if (event->button() == Qt::RightButton) { m_contextMenu->exec(event->globalPos()); } //要繼續(xù)保留QListWidget原有的點(diǎn)擊事件. QListWidget::mousePressEvent(event);}
當(dāng)重寫后,別忘記把QListWidget部件提示為你的QMyListWidget部件,提升方法看上篇博客.
2.重寫virtual void contextMenuEvent(QContextMenuEvent *event);
//"QMyListWidget.h"頭文件基本一致,所以就不放上來了.//下面是"QMyListWidget.cpp"的代碼.void QMyListWidget::contextMenuEvent(QContextMenuEvent *event){ //讓菜單移動(dòng)到鼠標(biāo)位置并顯示. 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){ //把鼠標(biāo)位置轉(zhuǎn)化成相對(duì)于QWidget的位置,然后判斷是否在QListWidget內(nèi). 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.設(shè)置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); //和該策略對(duì)應(yīng)的信號(hào),showListWidgetMenuSlot為自己定義的槽函數(shù). connect(ui.listWidget, SIGNAL(customContextMenuRequested(QPoint)),this, SLOT(showListWidgetMenuSlot(QPoint)));}c::~c(){}void c::showListWidgetMenuSlot(QPoint pos){ m_contextMenu->exec(QCursor::pos());}
5.使用事件過濾器.假設(shè)在窗口中.因?yàn)槿绻谥貙戭愔惺褂?,感覺沒什么必要.
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
以上就是關(guān)于pos機(jī)菜單詳解,Qt右鍵菜單的5種方案的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)菜單詳解的知識(shí),希望能夠幫助到大家!
