Теперь я использую WMF для отображения реальной рамки камеры на Qt. Сначала можно получить рамку изображения в OnProcessSample, которая находится в моем классе Grabber, унаследованном от IMFSampleGrabberSinkCallback с WMF регулярно.WMF & Qt Не может получить сигнал в слоте от OnProcessSample
WMF.CPP
STDMETHODIMP Grabber::OnProcessSample
(
REFGUID guidMajorMediaType,
DWORD dwSampleFlags,
LONGLONG llSampleTime,
LONGLONG llSampleDuration,
const BYTE * pSampleBuffer,
DWORD dwSampleSize
)
{
QMutexLocker locker(&m_SampleMutex);
pMySignal->setValue();
return S_OK;
}
Для того, чтобы уведомить получение кадра UI, я попытался создать простые классы, унаследованные от QObject с Signal & слот, как в следующем.
mainwindow.h
class MySignal : public QObject
{
Q_OBJECT
public:
MySignal(QObject * parent = 0, char* name = 0)
{
setObjectName (name);
}
void setValue() { emit EnvokeSignal(); }
public slots:
void ReceiveSignal();
signals:
void EnvokeSignal();
};
class MySignal2 : public QObject
{
Q_OBJECT
public:
MySignal2(QObject * parent = 0, char* name = 0)
{
setObjectName (name);
}
void setValue() { emit EnvokeSignal2(); }
public slots:
void ReceiveSignal2();
signals:
void EnvokeSignal2();
};
mainwindow.cpp
MySignal* pMySignal;
void MySignal::ReceiveSignal()
{
//qDebug()<<"Objectname = "<< objectName() <<" val = "<< v;
OutputDebugString(L" === ReceiveSignal === \n");
}
void MySignal2::ReceiveSignal2()
{
//qDebug()<<"Objectname = "<< objectName() <<" val = "<< v;
OutputDebugString(L" === ReceiveSignal === \n");
}
void MainWindow::on_pushButton_clicked()
{
MySignal SignalSlotCleass(0, "a");
MySignal2 Signal2SlotCleass(0, "b");
pMySignal = &SignalSlotCleass;
QObject::connect(&SignalSlotCleass, &MySignal::EnvokeSignal, &Signal2SlotCleass, &MySignal2::ReceiveSignal2);
EnumerateCamDevice_StartupMF();
}
Когда я использую только два класса, как MySignal1, MySignal2, я мог бы получить сообщение сигнала в методе Slot. Но если я попытался объединить WMF.cpp с функцией OnProcessSample, я не смог получить сообщение сигнала, отправленное из функции OnProcessSample в слот. Если кто-нибудь знает эту проблему, не могли бы вы дать мне несколько советов по ее преодолению?
Я очень ценю свой комментарий. Это действительно полезно ~ Спасибо^__^ – MichaelH
Рад это слышать =) – Guinness