基于嵌入式Qt的输入法syszuxpinyin自动弹出软件盘的问题

移植好的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();
}

猜你喜欢

转载自blog.csdn.net/qq_40170041/article/details/131701220