2013-07-20 185 views
0

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

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

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

+0

这岂不工作完全一样作为车轮事件在这个问题的方式:http://stackoverflow.com/questions/17738997/how-to-redirect-wheel-events-of-qwidget-to-qtextedit – 2013-07-20 16:36:30

+0

也许是一样的,但我不明白他的代码。你可以给我看一些代码吗? – iMath

回答

0

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

Catching Qt modifier key releases

如果您的应用程序不集中的一切,你需要使用一个键盘钩子或类似的东西。

希望有所帮助。

+0

当然,这里的前提是应用程序仍然有焦点 – iMath

0

这是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过滤