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);
}
佈置完相關代碼之後即可實現效果(嘻嘻😳)相關博文部分鏈接參考