qml多线程

60 阅读1分钟

使用 QThread::create

定义信号 signals 通知 ui 更新数据

signals:
    void started();
    void finished(QString text);

创建线程

QThread *thread = QThread::create([=](){
    QThread::msleep(5000); //模拟耗时任务
});
connect(thread, &QThread::started, [=](){
    qDebug() << "=========线程开始执行(5s)===";
    emit started();
});
connect(thread, &QThread::finished, [=](){
    qDebug() << "线程执行完成==============";
    emit finished("hello");
    thread->deleteLater();
});
thread->start();

示例代码

Button {
    text: "newThread"
    onClicked: _model.newThread() //启动线程
}

Loading {
    id: loading
    anchors.centerIn: parent
}

Timer {
    id: timer
    interval: 1000
    onTriggered: {
        if (!connect.isOk) {
            loading.open() //开启loading
        }
    }
}

Connections {
    id: connect
    property bool isOk: false

    target: _model
    function onStarted() {
        isOk = false
        timer.start()
    }
    function onFinished(text) {
        isOk = true
        loading.close() //关闭loading
        console.log("result, text = " + text)
    }
}