簡體   English   中英

如何將帶有數組參數的信號發送到另一個線程

[英]How to emit a signal with array parameter to another Thread

我是Qt的新手,我想使用一些參數從QThread向主線程發出信號。 沒用 我究竟做錯了什么?

//reader.h
signals:
        void updateData(quint16 fw, QString serial, quint16 *calibration);
//reader.cpp
...
{
    quint16 calibration[8];
    quint16 fw;
    QString serialNumber;
    readData(&fw, &serialNumber, calibration);
    // Declaration: void Reader::readData(quint16 *fw, QString *serial, quint16 *calibration) 
    emit updateData(fw, serialNumber, calibration); // In this function all parameters are assigned correctly
}
//mainwindow.h
 public slots:       
            void updateData(quint16 fw, QString serialNumber, quint16 *calibration);
//mainwindow.cpp
void MainWindow::updateData(quint16 fw, QString serialNumber, quint16 *calibration)
{   
    ui->lineEditFW->setText(QString::number(fw));     // correct
    ui->lineEditSerialNumber->setText(serialNumber);  // correct
    ui->spinBoxReg1->setValue(calibration[0]);        // incorrect!
    ui->spinBoxReg2->setValue(calibration[1]);        // ..array calibration
    ui->spinBoxReg3->setValue(calibration[2]);        // ..is filled with
    ui->spinBoxReg4->setValue(calibration[3]);        // ..random data!
    ui->spinBoxReg5->setValue(calibration[4]);
    ui->spinBoxReg6->setValue(calibration[5]);
    ui->spinBoxReg7->setValue(calibration[6]);
    ui->spinBoxReg8->setValue(calibration[7]);
}
//...
init()
{
   // other connection of thread and reader object
   //...
   connect(reader, SIGNAL(updateData(quint16, QString, quint16 *)), this, SLOT(updateData(quint16, QString, quint16 *)));
   //...
   reader->moveToThread(readerThread);
   readerThread->start();
}

我也嘗試使用數組而不是指針。 效果也不佳。

謝謝。

標定[8]在堆棧中,因此當您的閱讀器函數返回時,它會被銷毀。 您需要使它持久化(在堆上分配),以便在傳遞信號時它仍然存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM