pos機(jī)菜單詳解,Qt右鍵菜單的5種方案

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

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

本文目錄一覽:

1、pos機(jī)菜單詳解

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í),希望能夠幫助到大家!

轉(zhuǎn)發(fā)請(qǐng)帶上網(wǎng)址:http://www.tjfsxbj.com/news/32669.html

你可能會(huì)喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。