QMetaObject::invokeMethod()方法使用Qt::QueuedConnection连接数数据异常

问题现象:

        在跨线程调用方法时,使用QMetaObject::invokeMethod()方法调用,同时使用 Qt::BlockingQueuedConnection连接类型是数据异常。

        1.在使用Qt::BlockingQueuedConnection连接类型时调用线程会阻塞,所以改为Qt::QueuedConnection进行队列类型调用。

        2.在Qt::QueuedConnection方式调用时应该先申明、注册相关自定义类及指针,

 Q_DECLARE_METATYPE(MyStruct); 
qRegisterMetaType("MyClass");

Q_DECLARE_OPAQUE_POINTER()(MyStruct*); 
qRegisterMetaType("MyClass*");

3.在QMetaObject::invokeMethod()或者Connect连接槽函数和信号时,使用Qt::QueuedConnection连接方式进行异步调用在传参数时应该直接传值,而不要传地址,避免由于是异步调用,当多次调用该方法时,可能出现在被调函数被调用时,传地址可能出现对应地址的值发生变化,进而值得不到理想的结果。

你可能感兴趣的:(qt)