QThread를 만드는 주 (GUI) 스레드가 있습니다.QThread에서 실행중인 C 코드에서 QMessageBox 표시
QThread에서 QMessageBox를 표시해야하는 C 함수를 호출하고 있습니다. 지금까지 단순히 다음 코드를 사용했습니다 :
void notify(char *str)
{
QMessageBox::information(0, "", QString(str));
}
C 코드에서 간단히 사용하고 C 코드에서 호출했습니다. 이것은 스레드 없이는 잘 동작하지만 이제는 스레드로 인해 다른 스레드에서 GUI 함수를 호출 할 수 없기 때문에 오류가 발생합니다.
일반적으로 이것은 this question의 답변과 같은 신호를 사용하여 회피 할 수 있습니다. 그러나 C 코드에서이 작업을 수행 할 수 있을지는 의문입니다.
그래서 C 코드를 GUI 스레드와 통신하여 QMessageBox를 표시하도록 할 수 있습니까?
감사합니다.
P.
가능하면 C 코드를 건드리지 않고이 작업을 수행하고 싶습니다. (현재로서는 C 코드의 헤더에 extern void notify(char *)
선언이 있고 가능한 경우 해당 코드를 그대로두고 싶습니다.)
QWidget
또는
QMainWindow
파생 클래스를 가정
답변 해 주셔서 감사합니다. 내 대답을 약간 잘못 읽었거나 잘못 설명했다고 생각하지만'notify (not-class) 함수는 실제로 C++ 코드에있다. (C 코드는 단지 그것을 호출한다). ** 당신의 예제에서'MyWidget'에 대한 포인터를 얻는다. 그래서, 당신이 제안한대로 신호와 슬롯을 사용하는 메인 윈도우 클래스의 메소드를 호출 할 수 있습니다. 그러나 어쨌든, 나는 당신의 접근 방식을 사용했다. 컴파일러가'public signals '을 좋아하지 않는다는 것만 제외하면 잘 동작한다. 단지'signals'이다. – houbysoft