Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 QWebEngineView,在视图中发布关键事件_Qt_Pyqt_Qevent_Qkeyevent - Fatal编程技术网

Qt QWebEngineView,在视图中发布关键事件

Qt QWebEngineView,在视图中发布关键事件,qt,pyqt,qevent,qkeyevent,Qt,Pyqt,Qevent,Qkeyevent,我有自己的“虚拟键盘”。我已经将单击的按钮转换为KeyEvents,并将其传递给QTextEdit等等。我现在的问题是,我想对QWebEngineView中的可写区域执行同样的操作。 例如,我使用键盘编辑QLineEdit,并请求一个网站完成 比如说我请求谷歌。现在,谷歌网站就在我面前。我需要将KeyEvents从键盘发送到它的搜索框(QWebEngineView中的框) 现在让我们指出几点: 我正在使用PyQt5 正如我所读到的,API告诉我它的父级应该将KeyEvent消费到正确的位置。 这

我有自己的“虚拟键盘”。我已经将单击的按钮转换为KeyEvents,并将其传递给QTextEdit等等。我现在的问题是,我想对QWebEngineView中的可写区域执行同样的操作。

例如,我使用键盘编辑QLineEdit,并请求一个网站完成

比如说我请求谷歌。现在,谷歌网站就在我面前。我需要将KeyEvents从键盘发送到它的搜索框(QWebEngineView中的框)

现在让我们指出几点:

  • 我正在使用PyQt5
  • 正如我所读到的,API告诉我它的父级应该将KeyEvent消费到正确的位置。
  • 这段代码说“…就像使用QtWebKit一样。”
  • 我现在看到不再有QtWebKit了,所以改用Chromium。(也许这就是我不想发布这些事件的原因)
  • 这就是我用来模拟QEditText中的KeyEvents之类的东西。

    最后一部分是我在“self.\uu接收器”上发布事件的部分。此接收器总是为调用它的“QWidget”设置的

    我只是想说:

    def key_released(self):
        event = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier,
                          "a", False)
        # web_view is my QWebEngineView... but it won't consume. Or maybe it's not consuming to the right place.
        self.web_view.keyPressEvent(event)
    

    当您将事件发送到QWebEngineViews focusProxy时,应该可以这样做-类似这样的方式应该可以:

    recipient = self.web_view.focusProxy()
    QApplication.postEvent(recipient, event)
    

    Mannnnn,如果我有一百万美元,我现在就给你!天哪,你不知道我为了弄明白这件事伤了多少脑筋。尝试了一些疯狂的事情,而不是像那样简单的事情!!!做得很好!我只是不得不为这个“QCoreApplication.postEvent”更改这行“self.web\u view.keyPressEvent(event)”(self._receiver,event)”。通过按键事件,我无法访问受保护的方法。因此,我必须通过QCoreApplication.postEvent进行发布,正如我之前所做的和您所说的那样。:D
    recipient = self.web_view.focusProxy()
    QApplication.postEvent(recipient, event)