Qt如何实现输入框@联系人的@检测的示例

 更新时间:2022年08月01日 15:20:37   作者:何名取  
本文主要介绍了Qt如何实现输入框@联系人的@检测的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

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

解决思路

这项功能主要使用QTextEdit来进行输入,当输入@符号时,弹出联系人来进行选择指定的艾特联系人。

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

方法一:按键事件

首先使用方法一来尝试实现。方法一中需要重写按键事件函数:

#ifndef MYEDIT_H
#define MYEDIT_H

#include <QObject>
#include <QTextEdit>
#include <QKeyEvent>

class MyEdit : public QTextEdit
{
    Q_OBJECT
public:
    MyEdit(QWidget *parent);
    
protected:
    //按键事件
    void keyPressEvent(QKeyEvent *e);
};

#endif // MYEDIT_H
#include "myedit.h"
#include <QDebug>

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";
        }
    }
}

第二种方法比较简单,而且没有以上第一张方法的缺陷,大家可以根据需要选择性的进行使用。

到此这篇关于Qt如何实现输入框@联系人的@检测的示例的文章就介绍到这了,更多相关Qt 输入框@检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现管理系统的示例代码

    C++实现管理系统的示例代码

    这篇文章主要介绍了C++实现管理系统的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • C++文件相关函数CreateFile|ReadFile|WriteFile用法详解

    C++文件相关函数CreateFile|ReadFile|WriteFile用法详解

    这篇文章主要为大家详细介绍了c++有关文件创建、读取和写入的api:CreateFile、ReadFile、WriteFile的具体使用,需要的可以参考下
    2023-04-04
  • C++中String类的常用接口函数总结

    C++中String类的常用接口函数总结

    这篇文章主要介绍了C++中Stirng类的常用接口函数,文中有详细的代码示例供大家参考,对我们学习C++有一定的帮助,感兴趣的同学可以跟着小编一起来学习
    2023-06-06
  • C语言菜鸟基础教程之常量和变量

    C语言菜鸟基础教程之常量和变量

    在C语言中,常量和变量都是可以用来存储和表示数据的,常量值在程序执行的过程中是不可变的,而变量是可变的
    2017-10-10
  • Windows下Qt读取系统的内存、CPU、GPU等使用信息的示例代码

    Windows下Qt读取系统的内存、CPU、GPU等使用信息的示例代码

    在当今计算机应用广泛的领域中,了解系统的内存、CPU和GPU使用情况是非常重要的,本文将介绍如何使用Qt和Windows API来读取系统的内存、CPU和GPU使用详细信息,将提供一个完整的示例代码,需要的朋友可以参考下
    2024-01-01
  • C++内存模型与名称空间概念讲解

    C++内存模型与名称空间概念讲解

    这篇文章主要介绍了C++内存模型与名称空间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • 详解C++11中绑定器bind的原理与使用

    详解C++11中绑定器bind的原理与使用

    C++11中引入的function机制,其中绑定器主要有三种:bind1st、bind2nd、bind(C++11)。本文就来和大家聊聊这些绑定器的底层实现原理与使用场景,需要的可以参考一下
    2022-12-12
  • C++编写简易的飞机大战

    C++编写简易的飞机大战

    一款自己设计的飞机小游戏,本程序于运行环境WINDOWS XP系统,采用C++语言编写。游戏具有得分排名榜,而且在游戏完成后可以提交得分到网络上的世界排名榜中。
    2015-08-08
  • 基于C语言实现五子棋游戏

    基于C语言实现五子棋游戏

    这篇文章主要为大家详细介绍了基于C语言实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C++实现扫雷小游戏

    C++实现扫雷小游戏

    这篇文章主要为大家详细介绍了C++实现扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03

最新评论