1. 程式人生 > >qt訊號和槽問題(變數只在槽函式中改變問題)

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 ""