더 좋은 실시간 QPixmap update 방법이 있을까요?



  • 여러개의 별도의 widget들이 있고 각각의 widget을 하나의 쓰레드에서 실시간으로 QLabel을 새로운 QPixmap으로 업데이트 하고 있습니다. 가끔씩 업데이트가 출력이 안 되는 경우가 생기는데, 더 좋은 방법을 알고 싶습니다.



  • @KooBH

    테스트 가능한 코드를 올리면 더 좋은 답변을 받을 수 있습니다. 막연하게 안되는 경우가 있다고 하면, 답변이 더 힘들어 집니다.

    모든 GUI는 메인 또는 GUI 단일 스레드에서 처리하기 때문에 실시간이라는 개념이 적용되지 않습니다. GUI가 업데이트 되기 위해서는 메인 스레드가 유휴 타임에서만 가능하며, 대량의 GUI 업데이트 시그널이 발생되면, GUI 스레드는 유휴 타임에 순차적으로 시그널 들을 처리합니다. 만약 중복되는 시그널이 있을 경우 메시지 루프에서 단일 시그널로 처리될 수 있으며, 오래된 시그널은 처리되지 않을 수도 있습니다.

    GUI를 실시간에 처리하기 위해서는 될 수 있으면, 적은 량의 시그널과 자료의 크기를 줄이십시오.



  • 짧은 제 생각으로는 쓰레드에서 보낸 신호가 위젯이 업데이트될 때 이벤트 루프에 중복으로 쌓여서 무시된 경우가 아닐까 추측해봅니다.
    update -> paintEvent 로 넘어갈텐데
    update 중복해서 이벤트 루프에 쌓인 경우 생략되어 한번만 호출된 것이 아닐까 합니다.
    코드가 없어서 정확히는 알 수 없지만 업데이트 속도가 ms 단위로 정교해야할 필요가 없다면
    update 가 불리는 signal/slot 연결을 Qt::QueuedConnection 옵션을 주고 해보세요.

    참고로 repaint는 애니메이션이 아닌 이상 되도록 사용하지 말라고 합니다.


Log in to reply