鼠标右键编辑框内时,会弹出系统默认的右键菜单,很多时候我们不需要,或者想使用自己设计的菜单,常见的方法就是重写QLineEdit类,修改它的事件处理。
如果屏蔽掉鼠标双击或拖动时选中编辑框内的文本,只需重写它的一些鼠标事件即可。而屏蔽右键菜单,需使用以下方法:
在事件循环进入QEvent::ContextMenu时,会弹出右键菜单,因而可以在处理该事件时,将其拦截,简单的说,就是不处理QLineEdit::event事件,代码如下:
lineeditex.h
#ifndef LINEEDITEX_H
#define LINEEDITEX_H
#include <QLineEdit>
class LineEditEx : public QLineEdit
{
public:
explicit LineEditEx(QWidget *parent = nullptr);
protected:
void mouseDoubleClickEvent(QMouseEvent *) override;
void mouseMoveEvent(QMouseEvent *) override;
bool event(QEvent *) override;
};
#endif // LINEEDITEX_H
lineeditex.cpp
#include "lineeditex.h"
#include <QEvent>
#include <QDebug>
LineEditEx::LineEditEx(QWidget *parent)
: QLineEdit(parent)
{
}
void LineEditEx::mouseDoubleClickEvent(QMouseEvent *)
{
return;
}
void LineEditEx::mouseMoveEvent(QMouseEvent *)
{
return;
}
bool LineEditEx::event(QEvent *e)
{
qDebug() << e->type();
switch (e->type()) {
case QEvent::ContextMenu: {
return false;
}
default:
break;
}
return QLineEdit::event(e);
}