c++ - 带有 std::vector 的信号和槽:左值问题

标签 c++ qt c++11

在我的一个项目中,我试图将 Qt 信号和槽机制与 std::vector<bool> 一起使用作为参数。我的项目相当于以下最少的代码:

类应用

// app.h
#ifndef APP_H
#define APP_H

#include <QObject>
#include <QSharedPointer>

#include "emitter.h"
#include "receiver.h"

class App : public QObject
{
    Q_OBJECT
public:
    App(QObject *parent = 0);

};

#endif // APP_H

// app.cpp

#include "app.h"

App::App(QObject* parent): QObject(parent)
{
    Emitter emitter;
    Receiver receiver;

    receiver.attachEmitter(emitter);
    emitter.run();
}

类发射器

//emitter.h
#ifndef EMITTER_H
#define EMITTER_H

#include <QObject>
#include <vector>
#include "helper.h"

class Helper;

class Emitter : public QObject
{
    Q_OBJECT
public:
    explicit Emitter(QObject *parent = 0);
    void run();
signals:
    void triggered(std::vector<bool> value);
};

#endif // EMITTER_H

// emitter.cpp
#include "emitter.h"

Emitter::Emitter(QObject *parent) : QObject(parent)
{

}

void Emitter::run()
{
    emit triggered(Helper::value());
}

接收器类

//receiver.h
#ifndef RECEIVER_H
#define RECEIVER_H

#include <QObject>
#include <QDebug>

#include <QSharedPointer>
#include "emitter.h"

class Emitter;

class Receiver : public QObject
{
    Q_OBJECT
public:
    explicit Receiver(QObject *parent = 0);
    void attachEmitter(QSharedPointer<Emitter> emitter);
signals:

public slots:
};

//receiver.cpp
#include "receiver.h"

Receiver::Receiver(QObject *parent) : QObject(parent)
{

}

void Receiver::attachEmitter(QSharedPointer<Emitter> emitter)
{
    connect(emitter.data(), &Emitter::triggered, [this](std::vector<bool> value) {
        qDebug() << "Received value";
    });
}

出于某种原因,编译器根本不喜欢它并向我打印了这个堆栈: Error stack

我需要做什么?谢谢

最佳答案

按值传递的信号/槽值必须在 Qt 元系统中注册,我不认为 std::vector 是默认注册的。您有没有改用 QVector 的原因?

有关更多信息,请参阅 Q_DECLARE_METATYPEqRegisterMetaType() .

关于c++ - 带有 std::vector 的信号和槽:左值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45416132/

相关文章:

javascript - 找不到 Qt Creator 导入文件

c++ - 隐藏 QGraphicsItem 超出边界的区域

c++ - clang 上的模棱两可的运算符重载

c++ - 使用 XLib 截屏会卡住我的电脑

c++ - Qt 中缺少链接器

c++ - C++ 迭代器的生命周期和有效性是多少?

c++ - Qt - 使用 QSlider 放大/缩小

c++ - 如何解决错误 "invalid types ' int [x][const char* ]' for array subscript"?

c++ - 专用于私有(private)成员类的 std::hash

c++ - std::function 和 std::mem_fn 有什么区别