欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測的示例

 更新時間:2022年08月01日 15:20:37   作者:何名取  
本文主要介紹了Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

最近在用qt做通訊類的客戶端軟件,其中有一項(xiàng)功能類似與微信和QQ聊天時的@全體人員和@指定聯(lián)系人。下面就來探究一下如何實(shí)現(xiàn)這項(xiàng)功能。

解決思路

這項(xiàng)功能主要使用QTextEdit來進(jìn)行輸入,當(dāng)輸入@符號時,彈出聯(lián)系人來進(jìn)行選擇指定的艾特聯(lián)系人。

  • 當(dāng)我們輸入@時,會先按下Shift按鍵不松,再按下字母鍵上方的數(shù)字鍵的2,也就是@鍵。因此,我們首先考慮使用按鍵事件來檢測是否按下了這兩個按鍵,當(dāng)按下這兩個按鍵時,跳轉(zhuǎn)至事件處理函數(shù)來進(jìn)行后續(xù)處理。
  • 另一種方法是利用QTextEdit的cursorPositionChanged()光標(biāo)位置變化信號來進(jìn)行檢測字符輸入,再使用QTextCursor和QTextBlock來檢測輸入字符是否為“@”再進(jìn)行后續(xù)處理。

方法一:按鍵事件

首先使用方法一來嘗試實(shí)現(xiàn)。方法一中需要重寫按鍵事件函數(shù):

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

這種方法有兩個缺陷,第一是輸入@后在輸入框中會產(chǎn)生換行,另外一個是在開啟中文輸入法的時候會失效,只有切換到英文輸入法的情況下才會起作用。

方法二:光標(biāo)位置變化信號

方法二要用到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";
        }
    }
}

第二種方法比較簡單,而且沒有以上第一張方法的缺陷,大家可以根據(jù)需要選擇性的進(jìn)行使用。

到此這篇關(guān)于Qt如何實(shí)現(xiàn)輸入框@聯(lián)系人的@檢測的示例的文章就介紹到這了,更多相關(guān)Qt 輸入框@檢測內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Opencv實(shí)現(xiàn)拼圖板游戲

    Opencv實(shí)現(xiàn)拼圖板游戲

    這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)拼圖板小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++ 中 const和static readonly區(qū)別

    C++ 中 const和static readonly區(qū)別

    這篇文章主要介紹了C++ 中 const和static readonly區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C基礎(chǔ) redis緩存訪問詳解

    C基礎(chǔ) redis緩存訪問詳解

    下面小編就為大家?guī)硪黄狢基礎(chǔ) redis緩存訪問詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • C++ 動態(tài)內(nèi)存管理詳情解說

    C++ 動態(tài)內(nèi)存管理詳情解說

    這篇文章主要介紹了C++ 動態(tài)內(nèi)存管理詳情解說,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-07-07
  • C語言中的getchar和putchar的使用方法

    C語言中的getchar和putchar的使用方法

    這篇文章主要介紹了C語言中的getchar和putchar的使用方法的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • C語言詳解如何實(shí)現(xiàn)順序棧

    C語言詳解如何實(shí)現(xiàn)順序棧

    順序棧,就是用一組地址連續(xù)的存儲單元來存放棧元素,然后用一個棧結(jié)構(gòu)去維護(hù)一個棧。在C中,可用動態(tài)開辟的數(shù)組去表示,維護(hù)的棧結(jié)構(gòu)需要有一個棧底和一個棧頂指針
    2022-04-04
  • 基于Matlab圖像處理的公路裂縫檢測實(shí)現(xiàn)

    基于Matlab圖像處理的公路裂縫檢測實(shí)現(xiàn)

    隨著公路的大量投運(yùn),公路日常養(yǎng)護(hù)和管理已經(jīng)成為制約公路運(yùn)營水平提高的瓶頸,特別是路面狀態(tài)采集、檢測維護(hù)等工作更是對傳統(tǒng)的公路運(yùn)維模式提出了挑戰(zhàn)。這篇文章主要介紹了如何通過Matlab圖像處理實(shí)現(xiàn)公路裂縫檢測,感興趣的可以了解一下
    2022-02-02
  • 一文詳解C++中的轉(zhuǎn)換構(gòu)造函數(shù)

    一文詳解C++中的轉(zhuǎn)換構(gòu)造函數(shù)

    在 C/C++ 中,不同的數(shù)據(jù)類型之間可以相互轉(zhuǎn)換,無需用戶指明如何轉(zhuǎn)換的稱為自動類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換),需要用戶顯式地指明如何轉(zhuǎn)換的稱為強(qiáng)制類型轉(zhuǎn)換,本文就給大家詳細(xì)介紹一下C++的轉(zhuǎn)換構(gòu)造函數(shù),需要的朋友可以參考下
    2023-09-09
  • 深入了解C語言的動態(tài)內(nèi)存管理

    深入了解C語言的動態(tài)內(nèi)存管理

    所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文將用5600字帶你深入了解動態(tài)內(nèi)存管理,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • C語言實(shí)現(xiàn)登錄注冊和忘記密碼功能

    C語言實(shí)現(xiàn)登錄注冊和忘記密碼功能

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)登錄、注冊和忘記密碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評論