本文主要是介绍【已解决】QT C++中QLineEdit不可粘贴输入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本博文源于生产实际,主要解决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+ areturn 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也不能选中
这篇关于【已解决】QT C++中QLineEdit不可粘贴输入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!