本博文源于生产实际,主要解决LineEdit不可粘贴输入的情况。下面将进行具体分析
问题来源
输入框只能一个个输入,不可复制粘贴。
分析
给QLineEdit装一个监听事件,监听它的事件即可。
问题解决步骤
问题一共分为三步:
- 书写监听事件
- 设置linEdit属性
- 验证获得结论
1、书写监听事件
监听事件吗,先定义后实现。定义:
bool eventFilter(QObject *obj, QEvent *event);
然后定义它
bool CSingleDeviceInfo::eventFilter(QObject * obj, QEvent * event)
{
QLineEdit *pLineEdit = qobject_cast<QLineEdit *>(obj);
if (pLineEdit != NULL && pLineEdit == ui->IpAddressLE)
{
if (event->type() == QEvent::MouseButtonDblClick) {//防止全选 ctrl+ a
return true;
}
else if (event->type() == QEvent::MouseButtonPress) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if (mouseEvent && mouseEvent->button() == Qt::RightButton) //屏蔽右键
return true;
}else if(event->type() == QEvent::KeyPress) { //键盘事件
QKeyEvent *pKeyEvent = static_cast<QKeyEvent*>(event);
if (pKeyEvent->matches(QKeySequence::SelectAll)|| pKeyEvent->matches(QKeySequence::Copy)
|| pKeyEvent->matches(QKeySequence::Paste))
return true;
}
}
return QFrame::eventFilter(obj,event);
}
因为笔者继承的QFrame所以,这里return QFrame
return QFrame::eventFilter(obj,event);
如果继承QObject,那么就只需要把QFrame改成QObject就行了,其余不变。如果这段代码编译不过,这些头文件加上
#include<QKeyEvent>
#include<QEvent>
2、设置lineEdit属性
设置这个属性,这样可以直接让其不能右键粘贴,这个也要考虑到
3、验证获得结论
结论就是
- ctrl +v不能粘贴进去
- 右键 不能弹出上下文菜单
- ctrl + a也不能选中