qt訊號和槽問題(變數只在槽函式中改變問題)
阿新 • • 發佈:2018-11-10
在連結一個類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 ""