Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;稍后在QML中调用发射信号_C++_Qt_Qml - Fatal编程技术网

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

我有一个项目的QML和C++边,我通过C++代码> QyNojkabry//C>和<代码> QyProjs宏来公开我的C++属性。我的问题是,即使当我在C++中发出信号时,QML边也会受到其他代码的影响。有人能给我一个解决方案吗

我有一个
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的线程中运行实际加载。

    谢谢,我会尝试。你的解决方案很好,我现在知道我错在哪里了。谢谢,我会尝试。你的解决方案很好,我现在知道我错在哪里了。