解决syszuxpinyin重复点击lineEdit无法弹出输入法界面和无法删除原有内容问题
2017-02-22 07:18
651 查看
解决方法均来源于论坛,自己把它给整理一下
1,因为自己做的界面用到了lineedit,但是发现第一次点击lineedit获得焦点就可以弹出输入法界面,但是再重复点击的时候就不能弹出来了,必须重新获得焦点,于是通过重载重载了QLineEdit的mousePressEvent
在mousePressEvent加上一个自定义的信号 emit clicked()
重载代码如下:
mylineedit.h
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
#include <QLineEdit>
#include <QMouseEvent>
class mylineedit : public QLineEdit
{
Q_OBJECT
public:
explicit mylineedit(QWidget *parent = 0);
protected:
virtual void mousePressEvent(QMouseEvent *event);
signals:
void clicked();
public slots:
};
#endif // MYLINEEDIT_H
mylineedit.cpp
#include "mylineedit.h"
mylineedit::mylineedit(QWidget *parent) :
QLineEdit(parent)
{
}
void mylineedit::mousePressEvent(QMouseEvent *event) {
if (event->button() == Qt::LeftButton) {
emit clicked();
}
QLineEdit::mousePressEvent(event);
}
然后再在creator中把lineedit提升为mylineedit,这样就跟按钮一样了,只要点击编辑框就
clearFocus()
setFocus()
槽函数如下:
void query::le_device_mf_clicked()
{
ui->lineEdit_device_Mf->clearFocus();
ui->lineEdit_device_Mf->setFocus();
}
然后再用connect把信号和槽函数连接起来就好了,这样就解决了连续输入不能弹出输入法的问题。
2,另外发现输入法不能删除已经编辑的内容,也就是只能往lineedit里面添加内容不能删除已经添加过的内容。这个比较郁闷,后来找到解决方法,但是只能适用于lineedit控件。
方法如下:
首先在syszuxim.h文件中的class SyszuxIM类中声明一个指针对象QLineEdit *le。
然后在syszuxim.cpp文件中的构造函数中添加 le = new QLineEdit; //added by me,在 void SyszuxIM::updateHandler(int type)函数中的
case QWSInputMethod::FocusIn:后添加代码
{
QWidget *current_focus_widget=new QWidget; //added by me
current_focus_widget = QApplication::focusWidget(); //added by me
le= qobject_cast<QLineEdit*>(current_focus_widget); //added by me
syszuxpinyin->show();
syszuxpinyin->lineEdit_window->setText(le->text()); //added by me
break;
} 注意要加上大括号。
将 void SyszuxIM::confirmString(QString gemfield) 函数里面的 sendCommitString(gemfield); 注释掉,添加 le->setText(gemfield);
保存后进行编译,即可生效。
注意这种方法只对QLineEdit控件有效,如果是其他控件,当焦点置于其他控件时会导致程序发生错误退出。这里我就比较悲剧了,因为我还有用到tableview显示数据库中的数据,于是这样设置了后,一点tableview程序就死掉了。于是这种方法不能用,只能再添加一个按钮clear负责把所填写的内容给清零。
1,因为自己做的界面用到了lineedit,但是发现第一次点击lineedit获得焦点就可以弹出输入法界面,但是再重复点击的时候就不能弹出来了,必须重新获得焦点,于是通过重载重载了QLineEdit的mousePressEvent
在mousePressEvent加上一个自定义的信号 emit clicked()
重载代码如下:
mylineedit.h
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H
#include <QLineEdit>
#include <QMouseEvent>
class mylineedit : public QLineEdit
{
Q_OBJECT
public:
explicit mylineedit(QWidget *parent = 0);
protected:
virtual void mousePressEvent(QMouseEvent *event);
signals:
void clicked();
public slots:
};
#endif // MYLINEEDIT_H
mylineedit.cpp
#include "mylineedit.h"
mylineedit::mylineedit(QWidget *parent) :
QLineEdit(parent)
{
}
void mylineedit::mousePressEvent(QMouseEvent *event) {
if (event->button() == Qt::LeftButton) {
emit clicked();
}
QLineEdit::mousePressEvent(event);
}
然后再在creator中把lineedit提升为mylineedit,这样就跟按钮一样了,只要点击编辑框就
clearFocus()
setFocus()
槽函数如下:
void query::le_device_mf_clicked()
{
ui->lineEdit_device_Mf->clearFocus();
ui->lineEdit_device_Mf->setFocus();
}
然后再用connect把信号和槽函数连接起来就好了,这样就解决了连续输入不能弹出输入法的问题。
2,另外发现输入法不能删除已经编辑的内容,也就是只能往lineedit里面添加内容不能删除已经添加过的内容。这个比较郁闷,后来找到解决方法,但是只能适用于lineedit控件。
方法如下:
首先在syszuxim.h文件中的class SyszuxIM类中声明一个指针对象QLineEdit *le。
然后在syszuxim.cpp文件中的构造函数中添加 le = new QLineEdit; //added by me,在 void SyszuxIM::updateHandler(int type)函数中的
case QWSInputMethod::FocusIn:后添加代码
{
QWidget *current_focus_widget=new QWidget; //added by me
current_focus_widget = QApplication::focusWidget(); //added by me
le= qobject_cast<QLineEdit*>(current_focus_widget); //added by me
syszuxpinyin->show();
syszuxpinyin->lineEdit_window->setText(le->text()); //added by me
break;
} 注意要加上大括号。
将 void SyszuxIM::confirmString(QString gemfield) 函数里面的 sendCommitString(gemfield); 注释掉,添加 le->setText(gemfield);
保存后进行编译,即可生效。
注意这种方法只对QLineEdit控件有效,如果是其他控件,当焦点置于其他控件时会导致程序发生错误退出。这里我就比较悲剧了,因为我还有用到tableview显示数据库中的数据,于是这样设置了后,一点tableview程序就死掉了。于是这种方法不能用,只能再添加一个按钮clear负责把所填写的内容给清零。
相关文章推荐
- 解决syszuxpinyin重复点击lineEdit无法弹出输入法界面和无法删除原有内容问题
- 解决syszuxpinyin重复点击lineEdit无法弹出输入法界面和无法删除原有内容问题
- 解决RecyclerView实现聊天界面,但点击下面的EditText后弹出的输入法会遮盖RecyclerView内容的方法
- 安卓EditText有时点击后无法自动弹出键盘的解决办法;TextWatcher多次调用问题
- App第三方登录微信遇到code以及无法弹出微信登录界面libs包不对等一系列问题解决
- 解决点击edittext时有时无法弹出软键盘的问题
- 解决Discuz7在Chrome中无法显示弹出窗口内容的问题
- dialog弹出,点击back按键无法返回问题解决
- 解决android 中在沉浸式布局下,EditText输入框在界面底部,在弹出输入法时将顶部标题栏向上推出界面问题
- Android 自定义布局dialog使用(解决edittext无法弹出输入法的问题)
- sql2008出现问题“因为无法为数据库 'MRsys' 中的对象 'dbo.T_USER_1311_DATA' 分配空间, 'PRIMARY' 文件组已满。请删除不需要的文件..."问题,解决了
- 关于AlertDialog中嵌入Edittext无法弹出输入法的问题解决
- Android WebView加载带有Input的输入框时点击无法弹出软键盘的问题解决
- android :点击某个按钮弹出在原有布局中没有(或者存在)内容 :以删除原有布局内容为例
- Android在界面中重复点击导致多次跳转或打开多个相同界面的问题的解决方式
- 基于qt的嵌入式平台输入法:SYSZUXpinyin移植到arm后,UDP接收端中文乱码 本地中文乱码 解决
- 实现select change 点击重复内容无法触发问题
- ECharts柱状图/折线图点击图例无法增添/删除折线的问题解决
- 基于qt的嵌入式平台输入法:SYSZUXpinyin移植到arm后,UDP接收端中文乱码 本地中文乱码 解决
- 基于qt的嵌入式平台输入法:SYSZUXpinyin移植到arm后,UDP接收端中文乱码 本地中文乱码 解决