【问题标题】:redirect keyboard events to QTextEdit when it has no focus?没有焦点时将键盘事件重定向到 QTextEdit?
【发布时间】:2013-07-25 20:35:18
【问题描述】:

当 QTextEdit 没有焦点时,如何将键盘事件重定向到文本编辑器?

我的代码在这里 http://qt-project.org/forums/viewthread/30245/

感谢您的帮助! 我确实想在应用程序级别拦截任何关键事件,我之前也被告知在这种情况下使用事件过滤器,但是我在这里实现 eventFilter() 函数有困难,你能显示一些代码吗?提前谢谢!

【问题讨论】:

标签: qt qt4 pyqt pyqt4 pyside


【解决方案1】:

使用事件过滤器将其从应用程序的另一部分重定向。

Catching Qt modifier key releases

如果您的应用程序根本没有焦点,则需要使用键盘挂钩或类似的东西。

希望对您有所帮助。

【讨论】:

  • 当然了,这里的前提是app还有焦点
【解决方案2】:

这就是在您的代码中实现 eventFilter 的方式:

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class BoxLayout(QWidget):
    def __init__(self, parent=None):
        super(BoxLayout, self).__init__(parent)
#        self.resize(100, 300)

        ok = QPushButton("OK")
        cancel = QPushButton("Cancel")
        self.textEdit = QTextEdit()
        vbox = QVBoxLayout()
        vbox.addWidget(self.textEdit)
        vbox.addWidget(ok)
        vbox.addWidget(cancel)
        self.setLayout(vbox)

        self.installEventFilter(self)





    def eventFilter(self, object_, event):
        if event.type() == QEvent.KeyRelease and self.focusWidget() != self.textEdit:
            self.textEdit.append(event.text())

        return False


app = QApplication(sys.argv)
qb = BoxLayout()
qb.show()
sys.exit(app.exec_())

如果您想阻止其他小部件接收密钥,只需在事件过滤器中返回 True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多