版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011791262/article/details/24872051
移植好的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();
-
}