C++ C++;稍后在QML中调用发射信号
我有一个项目的QML和C++边,我通过C++代码> QyNojkabry//C>和<代码> QyProjs宏来公开我的C++属性。我的问题是,即使当我在C++中发出信号时,QML边也会受到其他代码的影响。有人能给我一个解决方案吗 我有一个C++ C++;稍后在QML中调用发射信号,c++,qt,qml,C++,Qt,Qml,我有一个项目的QML和C++边,我通过C++代码> QyNojkabry//C>和 QyProjs宏来公开我的C++属性。我的问题是,即使当我在C++中发出信号时,QML边也会受到其他代码的影响。有人能给我一个解决方案吗 我有一个status \成员变量,并在我的头中这样公开它 Q_PROPERTY(QString statusProp MEMBER status_ NOTIFY status_changed) 然后,在.cpp文件中,我有函数load_project QString cont
status \
成员变量,并在我的头中这样公开它
Q_PROPERTY(QString statusProp MEMBER status_ NOTIFY status_changed)
然后,在.cpp文件中,我有函数load_project
QString controller::load_project(QString proj_name)
{
status_ = "Loading...";
emit status_changed();
clear_layers();
QString result = db_manager_.load_project(proj_name, engine_list_);
status_ = "";
emit status_changed();
return result;
}
上面,状态更改为“Loading…”,但是在db_manager.load_project()函数之后接收到发射信号,因此“Loading…”效果变得不可见。应用程序的QML部分中使用的
控制器的实例是否存在于GUI线程中?在这种情况下,会发生以下情况:
在代码中,设置状态
并发出状态_更改
信号。这实际上将信号传递给QML,但是
控件不会返回到事件循环,而是直接调用db\u manager\uu.load\u project()
方法,我猜该方法是阻塞的。此方法返回后
您将状态\u设置回空字符串,并再次发出状态\u更改
从controller::load_project
方法返回后,控制返回到Qt事件循环,直到现在才呈现QML部分
要更改此设置,请使用线程(via)在不同于GUI/QML的线程中运行实际加载。应用程序QML部分中使用的控制器的实例是否存在于GUI线程中?在这种情况下,会发生以下情况:
在代码中,设置状态
并发出状态_更改
信号。这实际上将信号传递给QML,但是
控件不会返回到事件循环,而是直接调用db\u manager\uu.load\u project()
方法,我猜该方法是阻塞的。此方法返回后
您将状态\u设置回空字符串,并再次发出状态\u更改
从controller::load_project
方法返回后,控制返回到Qt事件循环,直到现在才呈现QML部分
要改变这一点,请使用线程(via)在不同于GUI/QML的线程中运行实际加载。谢谢,我会尝试。你的解决方案很好,我现在知道我错在哪里了。谢谢,我会尝试。你的解决方案很好,我现在知道我错在哪里了。