首页 > 其他分享 >Qt 在线程中invokeMethod采用QueuedConnection模式,调用带指针参数槽,实际不会调用

Qt 在线程中invokeMethod采用QueuedConnection模式,调用带指针参数槽,实际不会调用

时间:2023-08-04 10:56:17浏览次数:38  
标签:调用 Qt 程中 传递 参数 引用 Test 线程

widgetObject有操函数Test:

void Test(int *v);

在线程中调用Test,会被忽略,实际不会调用。

QMetaObject::invokeMethod(widgetObject, "Test", Qt::QueuedConnection, Q_ARG(int*,&v));

下面是网上找的理由: 

在同一个线程中
当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象;(测试时,打印传递前后的地址不同) 引用传递不会复制对象;(测试时,打印传递前后的地址相同)

不在同一个线程中
当信号和槽不在同一个线程中时,分两种情况。 1、connect时使用AutoConnection(跨线程默认是QueuedConnection):值传递参数和引用传递参数没有区别,都会复制对象;(测试时,打印传递前后的地址不同) 2、connect时使用DirectConnection,测试结果和在同一线程中的结果相同。

emit发射信号 在信号中以&引用作为参数
以引用作为参数一定要注意,在第二次发射信号的时候,引用的实体已经不存在了。

所以,如果想让每一次发射的信号中参数的值都保存下来,不能是&引用和*指针作为参数,而应该使用值传递。

这样每次发射信号的值都能够保存下来。

 

可以通过把指针保存到一个值类型中,例如:

struct IntPointer
{
    int * Val;
};

通过IntPointer传递

 

标签:调用,Qt,程中,传递,参数,引用,Test,线程
From: https://www.cnblogs.com/SamFang/p/17605291.html

相关文章

  • 深入探讨API调用性能优化与错误处理
    随着互联网技术的不断发展,API(应用程序接口)已经成为软件系统中重要的组成部分。而优化API调用的性能以及处理错误和异常情况则是保障系统稳定性和可靠性的关键。本文将从以下几个方面来探讨如何进行性能优化和错误处理。一、优化API调用的性能1.使用合适的数据传输格式选择合适的数......
  • 深入探讨API调用性能优化与错误处理
    ​随着互联网技术的不断发展,API(应用程序接口)已经成为软件系统中重要的组成部分。而优化API调用的性能以及处理错误和异常情况则是保障系统稳定性和可靠性的关键。本文将从以下几个方面来探讨如何进行性能优化和错误处理。一、优化API调用的性能1.使用合适的数据传输格式选择......
  • Android 打印调用栈的方法
    转载1.Java层调用栈打印:(1)打印本地调用堆栈Log.i(TAG,Log.getStackTraceString(newThrowable()));//打印本地调用堆栈(2)打印远程调用堆栈importandroid.os.Binder;importandroid.app.IActivityManager;importandroid.util.Log;StringprocessName="";intpid=......
  • Qt 通过ADS实现倍福TwinCAT通信
    ADS通信分为两种:同步方式和异步方式。同步方式ADS客户端向ADS服务器发送ADS请求,在通信过程中客户端程序停止执行,直到获得ADS服务器返回的响应又可分为变量名方式和地址方式异步方式ADS客户端向ADS服务器发送ADS请求,同时客户端继续自己的工作。ADS服务器处理......
  • Qt 调用倍福TwinCAT通讯模块(TcAdsDll)
    Qt实现TwinCAT通讯目前这种方式是通过调用TwinCAT提供的AdsApi与倍福PLC通讯的。要求本机安装TwinCAT(无需作为主机,但是可能这个api依赖TwinCAT的一些服务)。关于AdsApi的官方资料请看这里,有函数的详细解释,还有例子。你值得拥有。https://infosys.beckhoff.com/english.php?conte......
  • Qt TwinCAT3中的变量回调函数的时间戳读取方式
    官网提供了例程,官网真是个宝库。基本ADS的操作都里面有例程了,但是可能会稍微分散一点,不过多看几遍,也就慢慢整理你所需要的东西出来了。https://infosys.beckhoff.com/index_en.htm1#include<Windows.h>2#include<conio.h>3#include<winbase.h>45#include<TcA......
  • Qt ADS中通过变量名访问变量的值
    在倍福提供的TwinCATADS的库的C(C++)接口中,有两种方式可以访问到PLC中的变量:根据地址访问、根据变量名访问。根据地址来访问的代码如下:1...2QStringhostNetId="192.168.12.51.1.1";3inthostPort=851;4AmsAddrtargetAddr=createAddr(hostNetId,hostPort);//这个......
  • 基于GPT搭建私有知识库聊天机器人(五)函数调用
    文章链接:基于GPT搭建私有知识库聊天机器人(一)实现原理基于GPT搭建私有知识库聊天机器人(二)环境安装基于GPT搭建私有知识库聊天机器人(三)向量数据训练基于GPT搭建私有知识库聊天机器人(四)问答实现OpenAI在6月13日发布了几个重磅更新,其中包括:开放了16k上下文的GPT-3.5-Turbo模型gpt-3.5-t......
  • 自动生成python程序调用关系逻辑图
    前言你是否因为看一个程序或者运行一个框架,不知道他的运行流程?自己想写一个运行流程却觉得麻烦无从下手?graphviz+pycallgraph帮你绘制让领导看了都拍桌子称赞你的python程序逻辑调用关系图!先来看一下我这段时间在写的一个框架的部分流程吧~密密麻麻,真的哈人,完整的更哈人。狗看了都......
  • 接口安全调用该怎么做?签名?证书?服务安全?
    在这个以“数据为生命”的时代,每一个开发商都尽可能的收集客户的数据建立自己的BI库,各系统、各平台间数据的传输和调用变得非常普遍且非常重要;那么作为开发人员,我们不但要防止系统被攻击被入侵,我们还要确保数据的安全和完整。 在内网传输和外网传输的数据对安全的要求一般是不同的......