網站首頁 編程語言 正文
前言
最近在用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";
}
}
}
第二種方法比較簡單,而且沒有以上第一張方法的缺陷,大家可以根據需要選擇性的進行使用。
原文鏈接:https://juejin.cn/post/7126504179735986206
相關推薦
- 2022-04-08 Android實現一個簡單的單詞本_Android
- 2022-05-03 Android?Compose自定義TextField實現自定義的輸入框_Android
- 2023-07-13 用webpack做一些前端打包時的性能優化
- 2022-03-04 uniapp上傳圖片視頻uniapp上傳圖片視頻
- 2022-07-10 TypeError: Cannot read property ‘forceUpdate‘ of u
- 2022-09-13 c++實現排序算法之希爾排序方式_C 語言
- 2022-10-27 Python入門之字符串操作詳解_python
- 2022-07-14 Android實現多點觸摸操作_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支