若該文爲原創文章,未經允許不得轉載
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客導航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/105635089
各位讀者,知識無窮而人力有窮,要麼改需求,要麼找專業人士,要麼自己研究
目錄
紅胖子(紅模仿)的博文大全:開發技術集合(包含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