Qt實用技巧:將QWidget作爲輸入窗口,接收鍵盤消息、輸入法並且控制輸入法懸浮工具欄位置控制

若該文爲原創文章,未經允許不得轉載
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客導航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/105635089
各位讀者,知識無窮而人力有窮,要麼改需求,要麼找專業人士,要麼自己研究

目錄

需求

將QWidget作爲輸入

接收/失去焦點

鍵盤消息

接收輸入法和其文字輸入

輸入法懸浮窗位置


紅胖子(紅模仿)的博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬結合等等)持續更新中...(點擊傳送門)

Qt開發專欄:實用技巧(點擊傳送門)

 

    Qt實用技巧:將QWidget作爲輸入窗口,接收焦點、鍵盤消息、輸入法並且控制輸入法懸浮工具欄位置

 

需求

QWidget接收焦點、鍵盤消息、輸入法,並控制輸入法懸浮窗位置。

 

將QWidget作爲輸入

要將QWidget作爲輸入窗口,必須要獲得焦點,設置其爲可獲取焦點策略

    this->setFocusPolicy(Qt::StrongFocus);

光設置其獲取焦點是不夠的,因爲QWidget獲取焦點的邏輯是沒有寫的,所以需要重寫下獲取焦點的邏輯:

void EquationEditorWidget::mousePressEvent(QMouseEvent *event)
{
    qDebug() << __FILE__ << __LINE__ << __FUNCTION__;
    this->setFocus();
    QWidget::mousePressEvent(event);
}

 

接收/失去焦點

接收焦點,如鼠標點擊使QWidget獲取焦點,需要重寫鼠標點擊消息,在鼠標點擊消息裏面使用setFocus()函數,QWidget纔會獲取焦點,並觸發FocusInEvent()函數;

void EquationEditorWidget::focusInEvent(QFocusEvent *event)
{
    qDebug() << __FILE__ << __LINE__ << __FUNCTION__;
    QWidget::focusInEvent(event);
}

失去焦點,其他可接收焦點的控件點擊後,QWidget會自己失去焦點,觸發FocusOutEvent()函數;

void EquationEditorWidget::focusOutEvent(QFocusEvent *event)
{
    qDebug() << __FILE__ << __LINE__ << __FUNCTION__;
    QWidget::focusOutEvent(event);
}

綜合以上,主要是獲取焦點的地方需要手工寫。

void EquationEditorWidget::mousePressEvent(QMouseEvent *event)
{
    qDebug() << __FILE__ << __LINE__ << __FUNCTION__;
    setFocus();
    QWidget::mousePressEvent(event);
}

 

鍵盤消息

QWidget獲取焦點後,就可以獲取鍵盤消息了。

 

接收輸入法和其文字輸入

接收輸入法,需要設置一下屬性,當輸入法輸出的時候會觸發inputMethodEvent()函數,那麼在裏面可以提取輸入法最終輸出的結果。

屬性設置

    this->setAttribute(Qt::WA_InputMethodEnabled, true);

輸入法輸入的文字獲取

void EquationEditorWidget::inputMethodEvent(QInputMethodEvent *event)
{
    qDebug() << __FILE__ << __LINE__ << event->commitString();
    QWidget::inputMethodEvent(event);
}

 

 

原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客導航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/105635089

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