【问题标题】:Which Thread Does QML Functions run in?QML 函数在哪个线程中运行?
【发布时间】:2021-04-27 21:52:09
【问题描述】:

我想知道qml函数是在主线程中运行的吗?

c++信号和qml slot直接连接还是排队连接?

【问题讨论】:

  • 我不认为有一个简单的答案。例如,有不同类型的绑定。但是是的,大多数情况下它在“主/GUI”线程中运行,就像大多数(所有?)具有用户界面的应用程序一样。研究doc.qt.io/qt-5/qtquick-performance.html 以获得优化技巧和一些技术细节。

标签: qt qml


【解决方案1】:

qml 函数在主循环中运行。看看这里: https://marketplace.qt.io/products/main-loop-wdt-for-qt-qml

关于 C++ 信号和 QML 插槽,我不确定。我假设它是 Qt::AutoConnection,但我使用的是代理信号:

signals:
void dateChanged();
void _dateChanged();
...
  connect(this,&Utils::_dateChanged,this,&Utils::dateChanged, Qt::QueuedConnection );
..
QtConcurrent::run([=]() {
...
  emit _dateChanged();
});

两个选项都有效:

      Utils{
            id:utils
            onDateChanged: { //DIRECT CONNECTION
                console.log("FROM MAINLOOP CHANGED")
            }
            on_DateChanged: { //QUEUED CONNECTION ??
                console.log("FROM THREAD CHANGED")
            }
        }

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 2013-03-16
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多