Qt Connect 无法连接到插槽

Posted

技术标签:

【中文标题】Qt Connect 无法连接到插槽【英文标题】:Qt Connect Unable to Connect to Slot 【发布时间】:2013-11-14 01:25:42 【问题描述】:

在遇到此问题之前,我在将信号连接到 Qt 中的插槽方面没有任何问题。单击工具按钮 (btnNR) 时,我无法连接到插槽。

插槽调用另一个要显示的小部件。我很确定连接信号的格式正确。但是,不会调用该插槽。有人可以帮忙吗?

SetMalDlg.h:

#pragma once
#include <QDialog>
#include <QtGui>

class SetMalDlgInjRem;

class SetMalDlg : public QDialog

    Q_OBJECT

public:
    SetMalDlg(void);
    ~SetMalDlg(void);
    SetMalInjRem *malInjRem;

public slots:
   void slot_SetMalDlgInjRem();

public:
   void createLayout();
   ...
;

SetMalDlg.cpp:

#include "SetMalDlg.h"
#include "SetMalDlgInjRem.h"

SetMalDlg::SetMalDlg(void)

    malInjRem = new SetMalDlgInjRem;
    createLayout();
    connect(btnNR, SIGNAL(clicked()), this, SLOT(slot_SetMalDlgInjRem()));
    setWindowModality(Qt::WindowModal);


SetMalDlg::~SetMalDlg(void)

    disconnect(btnNR, SIGNAL(clicked()), this, SLOT(slot_SetMalDlgInjRem()));


void SetMalDlg::createLayout()

    ...

    // create btnNR here

    ...



void SetMalDlg::slot_SetMalDlgInjRem()

    malInjRem->show();

SetMalDlgInjRem.h:

#pragma once
#include <QDialog>
#include <QtGui>

class SetMalDlgInjRem : public QDialog

    Q_OBJECT

public:
    SetMalDlgInjRem(void);
    ~SetMalDlgInjRem(void);

public:
   void createLayout();
   ...
;

SetMalDlgInjRem.cpp:

#include "SetMalDlgInjRem.h"
#include <QtGui>

SetMalDlgInjRem::SetMalDlgInjRem(void)

    createLayout();
    setWindowModality(Qt::WindowModal);


SetMalDlgInjRem::~SetMalDlgInjRem(void)



void SetMalDlgInjRem::createLayout()

    this->resize(1033, 452);
    labelMalInjRem = new QLabel(this);
    labelMalInjRem->setText("Text");
    labelMalInjRem->setGeometry(QRect(10, 10, 301, 31));

    ...

【问题讨论】:

显示您的标头代码。您是否已将它们声明为公共插槽:% 或其他什么? @AlexandreTryHardLeblanc:我已经包含了我的标题代码。是的,我已将slot_SetMalDlgInjRem() 声明为公共插槽并包含Q_OBJECT 您是否尝试过干净的项目,再次 qmake,然后构建并运行? @Tab:我已经清理并重建了项目。现在它工作正常,虽然我不确定发生了什么。 不要在问题中写解决方案,而是接受下面的答案 【参考方案1】:

您的代码很好,您只需清理项目、qmake 然后构建。由于您已编辑代码但未对其进行 qmake,因此未正确调用元对象编译器来更新 moc 生成文件中的更改,因此实际上并未连接插槽。

【讨论】:

以上是关于Qt Connect 无法连接到插槽的主要内容,如果未能解决你的问题,请参考以下文章

Qt for Qt:如何连接到具有新信号/插槽风格的信号?

如何在 Qt 中将插槽连接到信号 QProcess::started()?

Qt - 使用 lambda 函数修改先前连接信号的插槽参数

跟随发出的信号到其连接的插槽?

Qt Pushbutton无法连接插槽

无法添加插槽并将其连接到按钮