2013-03-23 1 views
0

QML과 PyQt를 사용합니다. 저는 파이썬에서 모델을 사용하고 델리게이트를 통해 QML로 데이터를 봅니다.QML로 진행 상태가 다른 스레드에서 이미지로드

import QtQuick 1.0 

Rectangle { 
    id: container 

    ListView { 
     id: tweetListView 
     anchors.fill: parent; 
     clip: true 
     model: mymodel 
     delegate: TweetDelegate { 
     //... 
     } 
} 

나는 QML에서 이미지를 열어야합니다, 그래서 나는

Image { 
    //... 
    source: url 
    OnClicked: { 
     busy_icon = true; 
     // mainWindow is a Python object 
     mainWindow.fetch_and_open(url); 
     busy_icon = false; 
    } 
} 

를 사용하지만 fetch_and_open()가 실행 중일 때, UI를 동결, 그래서 우리는 바쁜 아이콘입니다 않을거야. 다른 스레드에서 이미지를 가져오고 대리자에게 LoadFinished 신호를 보내서 사용 중이던 아이콘을 해제해야합니다.

그러나 대리인 외의 대리인과 어떻게 통신합니까?

답변

0

으로 아쉽게도 코드가 더 복잡해집니다. QML은 단일 스레드에서 실행되며 파이썬 호출은 동기적이고 차단됩니다. 대답은 파이썬 코드가 먼저 새로운 스레드를 생성하게하는 것입니다. 그런 다음 새 스레드에서 가져 오기 및 열기 작업을 수행하십시오. 까다로운 부분은 이제 busy_icon에게 언제 완료해야하는지 알려주는 방법이 필요합니다. 이것은로드가 끝났을 때 시작될 수있는 mainWindow 객체에 신호를 생성하여 수행됩니다. 그것의 사소한 신호를 처리하기 위해 귀하의 바쁜 아이콘을 중지하기 위해 연결.

관련 문제