【发布时间】:2014-08-13 09:36:40
【问题描述】:
我正在使用RtMidi 库在我的Qt 应用程序中处理midi 消息,但我遇到了槽触发器问题:
我的 PhMidiInput 对象正在根据特定的 midi 消息从 RtMidi 回调发出信号,但插槽并不总是被触发。
这是 PhMidiInput 类的一部分:
class PhMidiInput : QObject
{
Q_OBJECT
public:
void PhMidiInput() {}
signals:
void quarterFrame(unsigned char data);
private:
static void callback(double, std::vector< unsigned char > *message, void *userData ) {
PhMidiInput *midiInput = (PhMidiInput*)userData;
if(midiInput)
midiInput->onMessage(message);
}
void onMessage(std::vector<unsigned char> *message) {
...
emit quarterFrame(data);
...
}
}
连接到 lambda 仿函数有效:
PhMidiInput midiIn;
int quarterFrameCount;
connect(&midiIn, &PhMidiInput::quarterFrame, [&](unsigned char data) {
quarterFrameCount++;
});
连接到我的应用程序窗口可以:
// MyWindow inherits from QMainWindow
connect(_midiIn, &PhMidiInput::quarterFrame, this, &MyWindow::onQuarterFrame);
当尝试连接到继承自 QObject 的自定义类 (MidiTest) 时,它不会触发:
connect(_midiIn, &PhMidiInput::quarterFrame, this, &MidiTest::onQuarterFrame);
我想知道QObject::moveToThread() 周围是否有什么东西,但由于我自己没有创建线程(信号是从回调发送的)我不知道我是否需要使用它。
【问题讨论】:
标签: qt callback midi signals-slots