使用QML进度在另一个线程中加载图像

时间:2013-03-23 17:13:02

标签: python qt qml

我使用QML和PyQt。我使用Python中的模型,并使用委托在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()正在运行时,用户界面将会冻结,因此我们永远不会是忙碌的图标。我需要打开忙碌图标,在另一个线程中获取图像,然后向代理发送信号LoadFinished以关闭忙碌图标。

但是如何与代表之外的代表沟通?

1 个答案:

答案 0 :(得分:0)

不幸的是,您的代码需要变得更加复杂。 QML在单个线程中运行,对python的任何调用都是同步和阻塞的。答案是让您的python代码首先创建一个新线程。然后在该新线程中执行提取和打开操作。现在你需要一种方法来告诉你的busy_icon什么时候完成。这是通过在mainWindow对象中创建一个信号来完成的,该信号可以在加载完成时触发。从那里可以轻松地连接一个信号处理程序来告诉你忙碌的图标停止。

相关问题