Qt信号插槽:发送信号但不调用插槽

use*_*815 4 c++ qt signals-slots

我在C++中使用Visual Studio 2013中的Qt.我正在尝试将信号连接到插槽.问题是信号被发送但是槽功能从未被调用过,我不知道发生了什么.这段代码工作得比较早,但在我将代码从32位的Visual Studio 2012迁移到64位的Visual Studio 2013并进行了一些更改之后,它就不再起作用了.它打印调试语句:在发送,图像发送和连接之前,但它不打印出接收的图像.有人可以帮忙吗?

Streamer.h

signals:
    //Signal to output frame to be displayed
    void processedImageStream(const vector<QImage> &imgs, const QImage &image2, const QImage &image3, const QImage &image4);
Run Code Online (Sandbox Code Playgroud)

run()函数中的Streamer.cpp

qDebug() << "before sending";
emit processedImageStream(imgs,imgIntel, imgIntelDepth, imgIntelIR);
qDebug() << "images sent!";
Run Code Online (Sandbox Code Playgroud)

MainWindow.h

private slots:
    //Display video frame in streamer UI
    void updateStreamerUI(const vector<QImage> &imgs, const QImage &imgIntel, const QImage &imgIntelDepth, const QImage &imgIntelIR);
private:
    Streamer* myStreamer;
Run Code Online (Sandbox Code Playgroud)

MainWindow.cpp

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    //Streamer initialization
    myStreamer = new Streamer();
    QObject::connect(myStreamer, SIGNAL(processedImageStream(vector<QImage>, QImage, QImage, QImage)), this, SLOT(updateStreamerUI(vector<QImage>, QImage, QImage, QImage)));
    qDebug() << "connected";
    ui.setupUi(this);
}

//slot for when new images are sent from the Streamer class
void MainWindow::updateStreamerUI(const vector<QImage> &imgs, const QImage &imgIntel, const QImage &imgIntelDepth, const QImage &imgIntelIR) {
    qDebug() << "images received!";
    //rest of the code
}
Run Code Online (Sandbox Code Playgroud)

phy*_*att 8

我不知道这是否是您问题的核心,但QVector已经准备好在Qt元对象系统中传递.需要注册自定义类型.

qRegisterMetaType<T>("T");
Run Code Online (Sandbox Code Playgroud)

标准vector和标准库集合可以免除......我最近没有使用它们.

Qt的信号和插槽的运行时连接在无法执行连接时会向应用程序输出发出警告.您还可以查看返回值QObject::connect.

一个旁注,与问题没有直接关系,但我遇到了问题QVector并在其中存储了本地对象.如果操作不正确,对象将超出范围,访问时会出现奇怪的错误.有时,只有在调试模式下运行它才会发生.如果在堆上初始化对象,则不必担心它的一部分超出范围,但是在对集合调用clear之前需要清理.

阅读QVector并给它一个旋转.

同样位于每个广告位的顶部,请输入以下内容:

qDebug() << Q_FUNC_INFO;
Run Code Online (Sandbox Code Playgroud)