【发布时间】:2021-04-27 21:52:09
【问题描述】:
我想知道qml函数是在主线程中运行的吗?
c++信号和qml slot直接连接还是排队连接?
【问题讨论】:
-
我不认为有一个简单的答案。例如,有不同类型的绑定。但是是的,大多数情况下它在“主/GUI”线程中运行,就像大多数(所有?)具有用户界面的应用程序一样。研究doc.qt.io/qt-5/qtquick-performance.html 以获得优化技巧和一些技术细节。
我想知道qml函数是在主线程中运行的吗?
c++信号和qml slot直接连接还是排队连接?
【问题讨论】:
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")
}
}
【讨论】: