Qt入門之syszuxpinyin輸入法應該的小知識
阿新 • • 發佈:2019-01-28
移植好的syszuxpinyin輸入法能正常的檢測到控制元件焦點並自動彈出軟鍵盤
當使用預設的QLineEdit控制元件時就有了一些小小的問題:
問題一:QLineEditt在預設情況下會自動出現焦點,從而導致一進入介面就彈出軟鍵盤
但是我們需要點選一下控制元件它才彈出軟鍵盤
解決方法:設定QLineEdit的屬性為setFocusPolicy(Qt::StrongFocus) 或者是 setFocusPolicy(Qt::ClickFocus);
這是幫助文件裡的一段說明:
The policy is Qt::TabFocus if the widget accepts keyboard focus by tabbing, Qt::ClickFocus if the widget accepts focus by clicking,
Qt::StrongFocus if it accepts both, and
Qt::NoFocus (the default) if it does not accept focus at all
問題二:在預設情況下能輸入完了以後沒有點其他控制元件而再次輸入,簡單點就是說點第一次的時候可以彈出,第二次的時候不能
原因是控制元件無法重新獲得焦點,只有當它失去焦點的時候才能重新獲得焦點,所以你必須先點其他控制元件讓它失去焦點,然後再點它
重新獲得焦點.在板子上試驗過就知道
解決方法:子類化QLineEdit
.h檔案
.cpp檔案#ifndef _QLINEEDITIM_H #define _QLINEEDITIM_H #include <QLineEdit> #include <QMouseEvent> class QLineEditIM : public QLineEdit { Q_OBJECT public: explicit QLineEditIM(QWidget *parent = 0); protected: virtual void mousePressEvent(QMouseEvent *event); signals: void clicked(); public slots: void showInputMethod(); }; #endif //_QLINEEDITIM_H
#include "syszuxim.h"
#include "syszuxpinyin.h"
#include "qlineeditIM.h"
QLineEditIM::QLineEditIM(QWidget *parent):
QLineEdit(parent)
{
QWSInputMethod *im = new SyszuxIM;
QWSServer::setCurrentInputMethod(im);
connect(this, SIGNAL(clicked()), this, SLOT(showInputMethod()));
}
void QLineEditIM::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
emit clicked();
}
QLineEdit::mousePressEvent(event);
}
/*
* name : void showInputMethod()
* Type : QEvent
* Func : show inputthmod
* in : Null
* out : Null
*/
void QLineEditIM::showInputMethod()
{
clearFocus();
setFocus();
}