Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 输入方法是否阻止QLineEdit接收KeyPressEvent?_Qt_Qt4_Symbian_Nokia_N97 - Fatal编程技术网

Qt 输入方法是否阻止QLineEdit接收KeyPressEvent?

Qt 输入方法是否阻止QLineEdit接收KeyPressEvent?,qt,qt4,symbian,nokia,n97,Qt,Qt4,Symbian,Nokia,N97,我将此错误发送给Qt团队: 以下是描述: QLineEdit/QTextEdit在N97上未收到KeyPress事件 我有一个从QLinedEdit继承的自定义小部件,在这个小部件中我覆盖事件(QEvent*事件)、按键事件(QKeyEvent*事件)和按键释放事件(QKeyEvent*事件)。当我在N97设备上调试代码时,当我按下键盘上的任意键时,事件将按如下方式传递: 调用事件(QEvent*events),并将事件类型设置为KeyRelease 调用keyReleaseEvent(QKey

我将此错误发送给Qt团队: 以下是描述:

QLineEdit/QTextEdit在N97上未收到KeyPress事件 我有一个从QLinedEdit继承的自定义小部件,在这个小部件中我覆盖事件(QEvent*事件)、按键事件(QKeyEvent*事件)和按键释放事件(QKeyEvent*事件)。当我在N97设备上调试代码时,当我按下键盘上的任意键时,事件将按如下方式传递:

  • 调用事件(QEvent*events),并将事件类型设置为KeyRelease

  • 调用keyReleaseEvent(QKeyEvent*事件)

  • 而且从来没有调用过keyPressEvent

    如果我按Enter键、BackSpace键、action键、left键、right键、down键、up键,事件将按如下方式传递:

  • 调用事件(QEvent*events),并将事件类型设置为KeyPress

  • 调用keyPressEvent(QKeyEvent*事件)

  • 调用事件(QEvent*events),并将事件类型设置为KeyRelease

  • 调用keyReleaseEvent(QKeyEvent*事件)

  • 这是正确的

    如何复制:

    #include <QKeyEvent>
    #include <QMessageBox>
    #include <QLineEdit>
    #include <QTextEdit>
    #include <QDebug>
    
    
    class MyWidget : public QLineEdit { Q_OBJECT public: MyWidget(QWidget *parent=0); void keyPressEvent(QKeyEvent * event); void keyReleaseEvent(QKeyEvent * event ); bool event(QEvent *event); };
    
    MyWidget::MyWidget(QWidget *parent)
    :QLineEdit(parent)
    
    { setText("Hola"); }
    void MyWidget::keyPressEvent(QKeyEvent *event) { QLineEdit::keyPressEvent(event); }
    
    void MyWidget::keyReleaseEvent(QKeyEvent *event ) { QLineEdit::keyReleaseEvent(event); }
    
    bool MyWidget::event(QEvent *event ) {
    switch( event->type() ) { case QEvent::KeyPress: QLineEdit::event(event); break; case QEvent::KeyRelease: QLineEdit::event(event); break; default: QLineEdit::event(event); }
    
    }
    
    #包括
    #包括
    #包括
    #包括
    #包括
    类MyWidget:publicqlineedit{Q_对象public:MyWidget(QWidget*parent=0);void keyPressEvent(QKeyEvent*event);void keyereleasevent(QKeyEvent*event);bool event(QEvent*event);};
    MyWidget::MyWidget(QWidget*父项)
    :QLineEdit(父级)
    {setText(“Hola”);}
    void MyWidget::keyPressEvent(QKeyEvent*事件){QLineEdit::keyPressEvent(事件);}
    void MyWidget::keyReleaseEvent(QKeyEvent*事件){QLineEdit::keyReleaseEvent(事件);}
    bool MyWidget::事件(QEvent*事件){
    开关(event->type()){case QEvent::KeyPress:QLineEdit::event(事件);中断;case QEvent::KeyRelease:QLineEdit::event(事件);中断;默认值:QLineEdit::event(事件);}
    }
    
    如果从QTextEdit继承,则会出现相同的问题

    我有一个重播:

    这不是因为输入法吗?


    有人能给我解释一下他所说的“输入方法”是什么意思,以及它与接收到的事件的关系吗?我尝试了setInputMethodHits()和inputMethodEvent(),但没有成功。

    在Symbian上,窗口服务器向FEP(前端处理器)发送关键事件,FEP反过来要求控件提供其输入功能(请参阅和TCoeInputCapabilities)。我认为这就是对bug报告的评论所指的内容

    Symbian中的OfferKeyEventL功能是作为一个责任链实现的,这意味着如果链中的控件可以处理关键事件,它将被消耗,链中的后续控件将不会意识到它


    因此,要么由于未设置输入功能(尽管我不知道如何通过Qt设置),事件被FEP丢弃,要么事件在链的早期被消耗。

    在Symbian上,窗口服务器向FEP(前端处理器)发送关键事件,后者反过来要求控件提供其输入功能(请参阅和TCoeInputCapabilities)。我认为这就是对bug报告的评论所指的内容

    Symbian中的OfferKeyEventL功能是作为一个责任链实现的,这意味着如果链中的控件可以处理关键事件,它将被消耗,链中的后续控件将不会意识到它


    因此,要么由于未设置输入功能(尽管我不知道如何通过Qt设置),事件被FEP丢弃,要么事件在链中的较早阶段被消耗。

    我的声誉分数将比你高:Pmy声誉分数将比你高:p