【Qt实用技巧】如何实现输入框@联系人的@检测

admin 2022年10月29日15:43:39评论33 views字数 1331阅读4分26秒阅读模式

前言

最近在用qt做通讯类的客户端软件,其中有一项功能类似与微信和QQ聊天时的@全体人员和@指定联系人。下面就来探究一下如何实现这项功能。

解决思路

这项功能主要使用QTextEdit来进行输入,当输入@符号时,弹出联系人来进行选择指定的艾特联系人。
  • 当我们输入@时,会先按下Shift按键不松,再按下字母键上方的数字键的2,也就是@键。因此,我们首先考虑使用按键事件来检测是否按下了这两个按键,当按下这两个按键时,跳转至事件处理函数来进行后续处理。
  • 另一种方法是利用QTextEdit的cursorPositionChanged()光标位置变化信号来进行检测字符输入,再使用QTextCursor和QTextBlock来检测输入字符是否为“@”再进行后续处理。

方法一:按键事件

首先使用方法一来尝试实现。方法一中需要重写按键事件函数:
#ifndef MYEDIT_H#define MYEDIT_H
#include #include #include
class MyEdit : public QTextEdit{ Q_OBJECTpublic: MyEdit(QWidget *parent); protected: //按键事件 void keyPressEvent(QKeyEvent *e);};
#endif // MYEDIT_H

#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); }}

【Qt实用技巧】如何实现输入框@联系人的@检测这种方法有两个缺陷,第一是输入@后在输入框中会产生换行,另外一个是在开启中文输入法的时候会失效,只有切换到英文输入法的情况下才会起作用。

方法二:光标位置变化信号

方法二要用到QTextEdit自带的信号
【Qt实用技巧】如何实现输入框@联系人的@检测
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";        }    }}

【Qt实用技巧】如何实现输入框@联系人的@检测第二种方法比较简单,而且没有以上第一张方法的缺陷,大家可以根据需要选择性的进行使用。

作者:何名取
链接:https://juejin.cn/post/7126504179735986206
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文始发于微信公众号(汇编语言):【Qt实用技巧】如何实现输入框@联系人的@检测

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月29日15:43:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【Qt实用技巧】如何实现输入框@联系人的@检测http://cn-sec.com/archives/1368776.html

发表评论

匿名网友 填写信息