簡體   English   中英

QT如何將Qlist傳遞給類構造函數

[英]QT how to pass Qlist to class Constructor

我試圖將 Qlist 傳遞給類構造函數,但沒有成功。 我可以傳遞基本變量,但 Qlist 在編輯器中出錯

error: no matching constructor for initialization of 'Worker'

編譯器錯誤

error: no matching function for call to 'Worker::Worker(QList<MainWindow::MainWindow(QWidget*)::pnp_com_info>&)'
     Worker* worker = new Worker(pnp_data);

這是我在做什么。

主窗口.cpp

    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
   {
        ui->setupUi(this);

       // my sample structure
       struct pnp_com_info{
          QString com_name = "";
          int x = 0;
          int y = 0;
          int angle = 0;
          bool status = false;
        };

    QList<pnp_com_info> pnp_data;  // Qlist container
    pnp_com_info pnp_component_data; // struct 

    // fill with data
    pnp_component_data.com_name = "e18";
    pnp_component_data.angle = 600;

    // add it to Qlist container
    pnp_data.append(pnp_component_data);

    //  Worker worker(5); // sample int passed OK.
    // try to pass Qlist to worker constructor 
    Worker* worker = new Worker(pnp_data);  // no success get error : no matching constructor for initialization of 'Worker'
}

worker.h 源代碼

#ifndef WORKER_H
#define WORKER_H

#include <QObject>

class Worker : public QObject {
    Q_OBJECT
public:
           struct pnp_com_info{
              QString com_name = "";
              int x = 0;
              int y = 0;
              int angle = 0;
              bool status = false;
            };

   //   Worker(int sampleVar);
     Worker(QList<pnp_com_info> pnpData);
    ~Worker();
public slots:
    void doWork();
signals:
private:
     QList<pnp_com_info> pnp_components_data;
};
#endif // WORKER_H

worker.cpp

#include "worker.h"

// --- CONSTRUCTOR ---
 Worker::Worker(QList<pnp_com_info> pnp_data) {
//   Worker::Worker(int sampleVar) {
     this->pnp_components_data = pnp_data;

}

// --- DECONSTRUCTOR ---
Worker::~Worker() {
    // free resources
}
// --- PROCESS ---
// Start processing data.
void Worker::doWork() {
   // do some work
}

所以知道我做錯了什么。 謝謝

在 worker.cpp 中,您不在類范圍內。 所以你需要完全限定類型:

Worker::Worker(QList<Worker::pnp_com_info> pnp_data) {

然后在MainWindow您當然需要使用相同的結構Worker::pnp_com_info而不是定義新的結構類型。

您可能也想將 struct 定義放在Worker下以外的其他地方。 但是,僅根據您顯示的代碼就不可能提出建議; 也許將它作為Worker內部的嵌套結構是一個很好的地方。


我個人喜歡使用 Qt Creator(或我可能使用的任何 IDE,對於任何編程語言)重構功能來生成 .cpp 文件的方法定義。 像往常一樣在 .h 文件中寫入 th 類中的聲明,然后右鍵單擊它以獲取上下文菜單,選擇重構並選擇您想要的生成選項。 避免這樣的錯誤,如果頭撞,尤其是在有點累的情況下編碼時,可以節省很多。

暫無
暫無

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

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