qt信号和槽问题(变量只在槽函数中改变问题)

在链接一个类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 ""

猜你喜欢

转载自blog.csdn.net/shr903988854/article/details/73603491