QT多线程信号和槽参数传递(引用传递实例)

55 篇文章 26 订阅
37 篇文章 17 订阅

写了一个这样的信号

 
  1. void caculateReady( QList<QString> adds, QList<double> hotV, QList<double> coolV);

编译时正常,运行时了现错误

Object::connection: Cannot queue arguments of type 'QList<QString>'

(Make sure 'QList<QString>' is registered using qRegisterMetaType().))

原因:自定义的数据类型作为信号槽参数传递的时候,需要使用 qRegisterMetaType() 函数对该参数进行注册

代码修改如下:

  1. //添加文件引用

  2. #include <QMetaType>

  1. //注册参数类型

  2. qRegisterMetaType<QList<QString> > ("QList<QString>");

这样,这个QList<QString>就可以作为信号参数来传递了

F1出现的help文档中的定义为:

  1. int qRegisterMetaType ( const char * typeName )

  2. //实例

  3. qRegisterMetaType<MyClass>("MyClass");

qRegisterMetaType的返回值为自定义类型的ID

/******************************************************

qt信号提示No such signal xxx

原因是在信号槽连接的语法里不能有参数名出现。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt信号传递机制被广泛应用于多层次类之间的通信。Qt采用了一种基于事件的机制,用于将信号从一个类传递到另一个类。 在Qt中,信号是用来实现类之间通信的关键机制。一个类可以定义一个信号,当特定的事件发生时,该信号就会被触发。其他的类可以连接到这个信号,并在信号被触发时执行相应的函数。 Qt信号机制支持多层次类之间的信号传递。例如,如果类A定义了一个信号,类B和类C可以连接到这个信号。当类A发出信号时,类B和类C都会收到通知,并执行与信号关联的函数。 此外,Qt还支持将信号连接到特定实例的方法。例如,如果有多个实例化的类D,每个实例都有一个自己的信号。其他类可以连接到特定实例信号,并在该实例发出信号时进行响应。 Qt信号机制使得多层次类之间的信号传递变得简单和灵活。它提供了一种松耦合的方式来实现类之间的通信,使得修改一个类不会影响其他类的实现。这种机制在Qt应用程序中被广泛应用,使得类之间的通信更加方便和可维护。 ### 回答2: 在Qt中,多层次类之间的信号传递是通过信号机制实现的。信号Qt中一种用于对象间通信的机制,它实现了一种松耦合的方式,使得不同类之间的通信更加灵活和可扩展。 在多层次类之间,一个类可以定义一个信号,而另一个类可以定义一个函数。当某个事件发生时,发送信号的类会通过emit关键字发射(emit)信号,而注册了该信号函数会自动被调用。 需要注意的是,在多层次类之间进行信号传递时,需要保证信号函数之间的函数签名一致,即参数个数和类型需要匹配。这样才能确保信号发射时能够顺利调用到对应的函数。 Qt中的信号机制是基于元对象系统实现的,通过MOC(元对象编译器)在运行时实现信号的连接和调用。MOC会为每个包含信号的类生成一些辅助代码,以便在运行时进行信号的连接。 通过信号的机制,不同层次的类之间可以方便地进行通信和交互,可以实现复杂的功能和逻辑。这种方式可以解耦不同层次的类,使得代码更加模块化和可维护性更高。同时,信号还支持多线程,可以实现跨线程的通信。 总结来说,Qt中多层次类之间的信号传递是通过信号机制实现的,通过定义信号函数并使用emit关键字触发信号的方式进行通信。这种机制使得类与类之间的通信更加灵活和可扩展,提高了代码的模块化和可维护性。 ### 回答3: Qt是一个流行的C++跨平台应用程序框架,它提供了一个灵活的信号机制来实现多层次类之间的信号传递。 Qt中的信号是一种事件驱动的通信机制,即当一个对象的状态发生变化时,它会发出一个信号,其他对象可以通过连接到该信号函数来接收并处理这个信号。 在Qt中,一个类可以定义一个或多个信号,可以通过signals关键字声明。一个信号可以有任意数量和类型的参数。另一方面,一个类可以定义一个或多个函数,可以通过slots关键字声明。函数的参数列表必须与信号的参数列表匹配。 信号的连接是使用connect函数来实现的。一个对象的信号可以连接到另一个对象的函数,以便在事件发生时调用函数进行处理。连接可以是直接连接,也可以是队列连接。直接连接表示信号发出后立即调用函数,队列连接表示信号被放入一个事件队列中,在队列中的信号会在主事件循环中被处理。 通过信号的连接,Qt中的类可以方便地进行多层次的事件处理和信号传递。一个类可以发出一个信号,然后另一个类连接到这个信号并接收它,进而再发出另一个信号,以此类推,形成一个多层次的信号传递链。 总而言之,Qt中的多层次类之间的信号传递可以通过信号机制来实现。通过定义信号函数,并使用connect函数进行连接,可以方便地在类之间传递事件和数据。这种机制使得Qt应用程序的设计更加灵活和可扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值