Qt中在textEdit和LineEdit中使用enter鍵發送消息,捕獲回車信號,實現登錄界面和QQ發送消息的效果

Qt中在textEdit和LineEdit中分別使用Enter鍵發送消息,實現登錄和QQ發送的效果

1.在LineEdit中

1) 效果

假設一個用兩個行編輯框和兩個按鈕構成一個登錄界面。如下圖所示

在這裏插入圖片描述

在這裏使用行編輯框進行聚焦,需要達到的效果是按下鍵盤上的Enter鍵,就會自動觸發“登錄”按鈕的槽函數,達到下圖的效果。

在這裏插入圖片描述
因爲Qt中響應快捷鍵的方式有三種

  • 信號與槽
  • 通過按鈕控件的接口設置快捷鍵,如記事本中的ctrl+c和ctrl+v
  • 重寫鍵盤相應函數

因爲要求的不同,這裏不再贅述其他的所有功能實現,所以博主這裏使用一種一種簡單的方法,調用Qt中已有的接口,快速實現功能。那應該怎樣做到呢(😳),代碼如下

2)實現代碼

因爲在widget界面和dialog界面中代碼有所差異,所以這裏將兩者的差異區別給出

widget中

//在構造函數中添加如下代碼
ui->button->setFocus; 
ui->button->setDefault(true);

dialog中

//在構造函數中添加如下一行代碼即可
ui->button->setFocus;

使用LineEdit行編輯框中添加如上的不同代碼即可實現按下Enter鍵響應

2.在textEdit中

1)效果

與lineEdit不同的是,textEdit文本編輯框自帶有\n換行功能,所以在輸入多文本的時候,使用Enter鍵就會跳轉到下一行。
因爲,這裏給出了一種簡單的解決方法,使用事件過濾器,寫入鼠標響應事件,實現類似於QQ發送消息的功能,搭建的簡易效果如下圖

在這裏插入圖片描述
上面那個是顯示文本框,下面則是輸入文本框,在輸入文本框中聚焦,輸入文字,完畢之後按Enter鍵自動響應發送消息。

2)實現代碼

頭文件.h

//項目頭文件中添加事件過濾器
protected:
    bool eventFilter(QObject *target, QEvent *event);//事件過濾器

實現文件.cpp

//構造函數中對其調用
ui->ButtonSend->setFocus();
ui->ButtonSend->setDefault(true);
ui->textEditWrite->installEventFilter(this);//設置完後自動調用其eventFilter函數
#include <QKeyEvent>		//需要添加頭文件

//對其進行聲明實現
bool ClientWidget::eventFilter(QObject *target, QEvent *event)
{
    if(target == ui->textEditWrite)		//可替換
        {
            if(event->type() == QEvent::KeyPress)//回車鍵
            {
                 QKeyEvent *k = static_cast<QKeyEvent *>(event);

                 if(k->key() == Qt::Key_Return)
                 {
                     on_ButtonSend_clicked();		//替換爲需要響應的函數事件,以這裏的按鈕爲例
                     return true;
                 }
            }
        }
        return QWidget::eventFilter(target,event);
}

 

佈置完相關代碼之後即可實現效果(嘻嘻😳)相關博文部分鏈接參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章