0

在我遇到这个问题之前,我没有将信号连接到 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));

    ...
}
4

1 回答 1

2

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

于 2013-11-14T06:40:47.950 回答