在链接一个类A和另一个类B一个对象的时候,
如果在A类对象中定义对象B,只使用B x方式定义,需要在connect第三个槽参数中使用引用,大部分情况是在A中new一个B的对象,便可以直接使用connect.
A *x[24]=A *(x[24]);
然而在实际运用中,发生了这样神奇的情况:
如果此时直接定义B x[24],在第三个槽参数直接写x,按理说默认把信号发送到x[0]上,可是这时如果开启x[i](i<24&&i>0),在其它的数组x元素中,在任意的x[i]窗口里,依然可以接收到A类发送的信号,B中的私有公有变量在当前槽函数中甚至可以改变(已用debug函数测试,在其中确实改变),但是在B类其它的函数中却依旧是默认的情况,这种情况不知是否QT框架中出现的bug,x[i]的槽函数理应无法接收信号的参数.
具体示例如下:
1.Dialog dlg[24];
2.槽信号对接
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(this,SIGNAL(send(QString)),dlg,SLOT(getId(QString)));
}
3.在类A(mainwindow)中点击按钮发送信号
void MainWindow::on_pushButton_clicked()
{
emit send("fuck");
dlg[2].show();
}
4.类B(dialog)中接收信号//理应无法接受
void Dialog::getId(QString id)
{
roomId=id;
qDebug()<<"槽函数获得id"<<roomId;
}
5.在类B中其它按钮或函数触发此Id,为默认空字符串
void Dialog::on_pushButton_clicked()
{
qDebug()<<"Dialog其它地方id"<<roomId;
}
//debug输出结果
Starting E:\QT APP\build-TestOfCrash-Desktop_Qt_5_6_1_MinGW_32bit-Debug\debug\TestOfCrash.exe...
槽函数获得id "fuck"
其它地方id ""
其它地方id ""
其它地方id ""
如果在A类对象中定义对象B,只使用B x方式定义,需要在connect第三个槽参数中使用引用,大部分情况是在A中new一个B的对象,便可以直接使用connect.
A *x[24]=A *(x[24]);
然而在实际运用中,发生了这样神奇的情况:
如果此时直接定义B x[24],在第三个槽参数直接写x,按理说默认把信号发送到x[0]上,可是这时如果开启x[i](i<24&&i>0),在其它的数组x元素中,在任意的x[i]窗口里,依然可以接收到A类发送的信号,B中的私有公有变量在当前槽函数中甚至可以改变(已用debug函数测试,在其中确实改变),但是在B类其它的函数中却依旧是默认的情况,这种情况不知是否QT框架中出现的bug,x[i]的槽函数理应无法接收信号的参数.
具体示例如下:
1.Dialog dlg[24];
2.槽信号对接
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(this,SIGNAL(send(QString)),dlg,SLOT(getId(QString)));
}
3.在类A(mainwindow)中点击按钮发送信号
void MainWindow::on_pushButton_clicked()
{
emit send("fuck");
dlg[2].show();
}
4.类B(dialog)中接收信号//理应无法接受
void Dialog::getId(QString id)
{
roomId=id;
qDebug()<<"槽函数获得id"<<roomId;
}
5.在类B中其它按钮或函数触发此Id,为默认空字符串
void Dialog::on_pushButton_clicked()
{
qDebug()<<"Dialog其它地方id"<<roomId;
}
//debug输出结果
Starting E:\QT APP\build-TestOfCrash-Desktop_Qt_5_6_1_MinGW_32bit-Debug\debug\TestOfCrash.exe...
槽函数获得id "fuck"
其它地方id ""
其它地方id ""
其它地方id ""