前两天用到了QT的信号与槽这个机制,刚开始发射信号的时候,我是这么写的语句
connect(sender,SINGAL(),receiver,SLOT())
由于我用的是QT 5.11这个本,从网上查到的例子来说,大部分都是以上那个形式,也没有问题,而实际上在QT5.11版本上,向下面这样写编译器不会报错
connect(Polar_chartView,SIGNAL(Polar_Close_Singal),this,SLOT(Recrive_Signal_From_ChidrenDialog));
但是在debug时应用程序输出这样的提示
QObject::connect: Parentheses expected, signal Polar::Polar_Close_Singal in ..\JCY\mainwindow.cpp:9
QObject::connect: (receiver name: 'MainWindow')
应该更直白的说,语法错了。。。。
因为在QT5.11中,语法格式应为
connect(Polar_chartView,&Polar::Polar_Close_Singal,this,&MainWindow::Recrive_Signal_From_ChidrenDialog);
这里得吐槽一下,QT这个自动提示功能,慢的很,倒逼我去背语法啊!!!
这里连接函数用正确的语法写好之后,只能说这个桥搭好了,能不能让数据按照我们的意愿过桥,也是一个对于初学者不是很友好的问题,
-
发射信号里含有数据格式数量(send_format_num)一定是大于等于接收信号里含有的数据格式的数量(receive_format_num),就是我可以多发,你可以选择性的接收,但是所有想要接收的一定要都发出来,不然会报错;
-
一定要在头文件里声明相应的函数,这个网上有很多就不多说了;
-
发射信号的语法都是一样的,都是用emit这个关键字
-
emit Polar_Close_Singal(QString);
接收信号其实是一个void类型的函数
void MainWindow::Recrive_Signal_From_ChidrenDialog(QString temp)
{
qDebug()<<temp;
}
-
我在使用信号与槽机制时遇到的一点小问题,就是connect函数里,sender这个发送者名称这里遇到的,首先我是从Polar这个C++类向MainWindow这个QT窗口类类里发送数据,我就需要在MainWindow里声明一个Polar类的变量名,这个变量名一定要唯一,否则connect函数也不会报错,但就是不会把数据发送过来。
PortDialog *portdialog=new PortDialog();
后续遇到问题会逐渐更新。