gpt4 book ai didi

c++ - QT如何将Qlist传递给类构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:29 25 4
gpt4 key购买 nike

我试图将 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 而不是定义新的结构类型。

您可能还想将结构定义放在 Worker 下之外的其他地方。但是,仅根据您所显示的代码,这是不可能提出建议的;也许将它作为 Worker 中的嵌套结构是一个很好的地方。


我个人喜欢使用 Qt Creator(或我可能使用的任何 IDE,适用于任何编程语言)重构功能来生成 .cpp 文件的方法定义。像往常一样在 .h 文件中的类中编写声明,然后右键单击它以获取上下文菜单,选择重构并选择所需的生成选项。避免像这样的错误,如果头撞,尤其是在有点累的编码时,可以节省很多。

关于c++ - QT如何将Qlist传递给类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59712156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com