问题是我的信号可以发送到插槽,但我不知道如何将指针更改为qcheckbox*类型。然后我可以访问复选框的名称。函数是
直接发送qbytearray对象,而不是指针。qt的数据对象(qstring、qbytearray、container等)都是隐式共享的。复制时,它们共享相同的数据,而不需要深度复制。深度复制仅在写入时触发(任何非常量方法)。所以不用担心用信号槽发送qbytearray。qt参数传递的代价接近于零。此外,如果它不是隐式共享的,则使用智能指针而不是裸指针。例如,可以使用std::shared_uptr和qsharedpointer。顺便说一句,qt程序推荐使用qtthread,它更好地支持事件系统,开销也很低,因为不需要在死循环中写入线程。qtthread中的对象发送信号时隙,在接收线程中执行时隙函数,从而实现数据安全而不需要任何锁。如果使用这样的传统线程,slot函数将位于emit位置,并由发送线程执行。您需要处理数据安全问题并需要锁定,这更麻烦
qscrollbar*bar=newqscrollbar()connect(bar,signal(valuechanged(int)),this,slot(slidermoveload(int)))voidxxx::slidermoveload(intvalue){//qdebug()maximum()if(value)==bar->maximum()){//滚动时加载新数据你能发出信号吗?}}
如果事件未启用,它将自动报告信息。当系统程序运行触发该信号时,它将发送该信号。然而,如果你没有关联,这个信号是没有意义的。信号必须与插槽函数一起使用,而事件不能。
[您的问题中没有指定参数的接收者/发送者]对于通过connect传入的插槽功能参数,您可以使用信号(信号和插槽的参数应该一致)。对于qt自己的信号,描述文档列出了它们(参见下图)。这种信号可以用参数发送。如果信号类型不符合要求,您可以定制信号,如果答案有偏差,请及时提出