移植好的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文件
#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
.cpp文件
#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();
}