前言
解决思路
-
当我们输入@时,会先按下Shift按键不松,再按下字母键上方的数字键的2,也就是@键。因此,我们首先考虑使用按键事件来检测是否按下了这两个按键,当按下这两个按键时,跳转至事件处理函数来进行后续处理。 -
另一种方法是利用QTextEdit的cursorPositionChanged()光标位置变化信号来进行检测字符输入,再使用QTextCursor和QTextBlock来检测输入字符是否为“@”再进行后续处理。
方法一:按键事件
class MyEdit : public QTextEdit
{
Q_OBJECT
public:
MyEdit(QWidget *parent);
protected:
//按键事件
void keyPressEvent(QKeyEvent *e);
};
#include "myedit.h"
#include
MyEdit::MyEdit(QWidget *parent):
QTextEdit (parent)
{
}
void MyEdit::keyPressEvent(QKeyEvent *e)
{
if((e->modifiers() == Qt::ShiftModifier) && (e->key() == Qt::Key_At))
{
qDebug()<<"@at";
append(QKeySequence(e->key()).toString());//或者使用append(e->text());
return;
}
else {
QTextEdit::keyPressEvent(e);
}
}
这种方法有两个缺陷,第一是输入@后在输入框中会产生换行,另外一个是在开启中文输入法的时候会失效,只有切换到英文输入法的情况下才会起作用。
方法二:光标位置变化信号
方法二要用到QTextEdit自带的信号 void MainWindow::on_textEdit_2_cursorPositionChanged()
{
QTextCursor tc = ui->textEdit_2->textCursor();
QTextBlock tb = tc.block();
if(!tb.text().isEmpty())
{
QString tx = tb.text();
if(tx.endsWith("@"))
{
qDebug()<<"@at";
}
}
}
第二种方法比较简单,而且没有以上第一张方法的缺陷,大家可以根据需要选择性的进行使用。
作者:何名取
链接:https://juejin.cn/post/7126504179735986206
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。原文始发于微信公众号(汇编语言):【Qt实用技巧】如何实现输入框@联系人的@检测
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论