我正在开发一款软件,其中包括一个虚拟钢琴,可以通过midi键盘进行控制。 我想要做的是创建一个线程来监视midi输入,当有数据到达时触发相应的处理(例如播放声音和动画按键)。如何使用Qt线程和事件实现这一功能?
我正在开发一款软件,其中包括一个虚拟钢琴,可以通过midi键盘进行控制。 我想要做的是创建一个线程来监视midi输入,当有数据到达时触发相应的处理(例如播放声音和动画按键)。如何使用Qt线程和事件实现这一功能?
这里还有一个页面展示如何使用QThread: http://joplaete.wordpress.com/2010/07/21/threading-with-pyqt4/
以上内容基本涵盖了你所需要的。你可以创建一个带有run()函数的QThread,该函数将循环并监视你的midi端口,然后发出自定义信号。你可以在应用程序启动时启动此线程。你可以将QThread的自定义信号连接到主应用程序或任何应该被通知的小部件上的处理程序。
这里有一个小例子:
import time
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import SIGNAL, QObject
class DoSomething(QtCore.QThread):
def __init__(self):
QtCore.QThread.__init__(self)
def run(self):
time.sleep(3)
self.emit(SIGNAL('some_signal'))
def signalHandler():
# We got signal!
print 'Got signal!'
sys.exit(0)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
# Create new thread object.
d = DoSomething()
# Connect signalHandler function with some_signal which
# will be emited by d thread object.
QObject.connect(d, SIGNAL('some_signal'), signalHandler, QtCore.Qt.QueuedConnection)
# Start new thread.
d.start()
app.exec_()