您的位置:首页 > 其它

解决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负责把所填写的内容给清零。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐