Qt Connect ไม่สามารถเชื่อมต่อกับสล็อตได้

ฉันไม่มีปัญหาในการเชื่อมต่อสัญญาณเข้ากับช่องใน 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));

    ...
}

person Wallace    schedule 14.11.2013    source แหล่งที่มา
comment
แสดงโค้ดส่วนหัวของคุณ คุณได้ประกาศว่าเป็นช่องสาธารณะ: %หรืออะไรสักอย่าง?   -  person Alexandre TryHard Leblanc    schedule 14.11.2013
comment
@AlexandreTryHardLeblanc: ฉันได้รวมรหัสส่วนหัวของฉันแล้ว ใช่ ฉันได้ประกาศ slot_SetMalDlgInjRem() เป็นช่องสาธารณะและรวม Q_OBJECT ไว้ด้วย   -  person Wallace    schedule 14.11.2013
comment
คุณได้ลองใช้โปรเจ็กต์ใหม่ทั้งหมด qmake อีกครั้งแล้วสร้างและรันหรือไม่?   -  person Tab    schedule 14.11.2013
comment
@Tab: ฉันได้ทำความสะอาดและสร้างโครงการใหม่แล้ว ตอนนี้มันใช้งานได้ดี แม้ว่าฉันจะไม่แน่ใจว่าเกิดอะไรขึ้น   -  person Wallace    schedule 14.11.2013
comment
แทนที่จะเขียนคำตอบในคำถาม ให้ยอมรับคำตอบด้านล่าง   -  person BЈовић    schedule 14.11.2013


คำตอบ (1)


รหัสของคุณเป็นเรื่องปกติ คุณต้องล้างโปรเจ็กต์ qmake แล้วสร้าง เนื่องจากคุณได้แก้ไขโค้ดแล้ว แต่ไม่ได้ทำ qmake ดังนั้นเมตาอ็อบเจ็กต์คอมไพเลอร์จึงไม่ได้รับการเรียกใช้อย่างถูกต้องเพื่ออัปเดตการเปลี่ยนแปลงในไฟล์ที่สร้าง moc และด้วยเหตุนี้สล็อตจึงไม่ได้เชื่อมต่อจริง ๆ

person Tab    schedule 14.11.2013