Qt處理焦點事件(獲得焦點,失去焦點)
背景:
我只是想處理焦點動作,由于懶,上網(wǎng)一搜,排名靠前的一位朋友,使用重寫部件的方式實現(xiàn)。還是因為懶,所以感覺復(fù)雜了。于是又花了一分鐘解決了一下。
所以記錄下來,以免以后忘了。
思路:
事件過濾器是個好東西。
在vs里,從6.0到.net,為什么很多人評價說人家編程優(yōu)雅,確實好用。代碼自動格式化,各種事件特別全。
在qt里面轉(zhuǎn)到槽,就簡單的幾個信號。大部分還是要靠事件過濾器細分。其實,qt內(nèi)部已經(jīng)準(zhǔn)備了很多最基礎(chǔ)的信號(事件),只是需要多這樣一步。
插曲:之前跟同事聊,有些事實現(xiàn)起來不愿意多想,閑聊一句:qt能干這事不?也是隨口一句回答:c++都不行還什么能行?這句隨口一答,當(dāng)時是我即興發(fā)揮,沒考慮負(fù)不負(fù)責(zé)任。但卻成了后來qt之旅的信心來源。
言歸正傳。
先說一種場景,比如窗體上放一個文本框,我希望它永遠是焦點,也就是說,只要焦點離開,就setfocus。不討論實用性,只討論方法。以前在js中就實現(xiàn)過。
所以,第一步要做的是先看QEvent幫助,確認(rèn)里面支持。于是看到:enum QEvent::Type中有QEvent::FocusIn和QEvent::FocusOut,這就行了。我們只用到QEvent::FocusOut。
方法:
給文本框安裝事件過濾器,窗體代碼中重寫eventFilter函數(shù),并在其中判斷event->type()。代碼如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
bool eventFilter(QObject *watched, QEvent *event);
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->installEventFilter(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if (watched == ui->lineEdit && event->type() == QEvent::FocusOut)
{
ui->lineEdit->setFocus();
return true;
}
return QWidget::eventFilter(watched, event);
}
然后直接運行看效果,始終是這個文本框獲得焦點,無論鼠標(biāo)點擊別處,或者tab鍵切換焦點。
總結(jié):
所以,核心思想還是充分理解事件過濾器,相當(dāng)好用。
到此這篇關(guān)于Qt處理焦點事件(獲得焦點,失去焦點)的文章就介紹到這了,更多相關(guān)Qt 焦點事件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++賦值函數(shù)+移動賦值函數(shù)+移動構(gòu)造函數(shù)詳解
這篇文章主要介紹了C++賦值函數(shù)+移動賦值函數(shù)+移動構(gòu)造函數(shù)詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
詳解C語言中的fopen()函數(shù)和fdopen()函數(shù)
這篇文章主要介紹了詳解C語言中的fopen()函數(shù)和fdopen()函數(shù),注意其之間指針功能相關(guān)的區(qū)別,需要的朋友可以參考下2015-08-08
C++ leetcode之刪除并獲得點數(shù)的示例代碼
這篇文章主要介紹了C++ leetcode之刪除并獲得點數(shù)的示例代碼,本文給大家分享問題解析及解決方案,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
C++ windows LOG4plus的使用小結(jié)
這篇文章主要介紹了C++ windows LOG4plus的使用小結(jié),本文通過圖文示例代碼相結(jié)合給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-05-05

