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 中将插槽连接到信号 QProcess::started()?