QObject :: connect没有将信号连接到插槽

时间:2012-11-27 22:53:18

标签: c++ qt user-interface signals-slots

我在我的项目中使用C ++和Qt,我的问题是QObject :: connect函数没有将信号连接到插槽。我有以下课程:

class AddCommentDialog : public QDialog
{
    Q_OBJECT

public:
    ...some functions 

signals:
    void snippetAdded();

private slots:
    void on_buttonEkle_clicked();

private:
    Ui::AddCommentDialog *ui;
    QString snippet;
};

我的主窗口的一部分:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void commentAddedSlot();
    void variableAddedSlot();
    ...

private:
    AddCommentDialog *addCommentDialog;
    ...
};

Ant最后一个对话框;

class AddDegiskenDialog : public QDialog
{
    Q_OBJECT

public:
    ...

signals:
    void variableAdded();

private slots:
    void on_buttonEkle_clicked();

private:
    Ui::AddDegiskenDialog *ui;
    ...
};

在主窗口构造函数中,我连接信号和插槽:

addCommentDialog=new AddCommentDialog();
addDegiskenDialog=new AddDegiskenDialog();

connect(addDegiskenDialog, SIGNAL(variableAdded()), this, SLOT(variableAddedSlot()));
connect(addCommentDialog, SIGNAL(snippetAdded()), this, SLOT(commentAddedSlot()));

重点是我的commentsAdded已成功连接到它的信号,但是commentsAddedSlot失败了。 有Q_OBJECT宏,没有关于没有x槽的警告。除此之外, 接收器(SIGNAL(snippetAdded()))给我1但接收器(SIGNAL(variableAdded()))给我0,我使用命令qmake -project; qmake和make to complete compile。 我错过了什么?

1 个答案:

答案 0 :(得分:3)

快速查看代码不会给您带来什么问题。

但是,这里有一些时刻:

  1. 正如Mike所说here:出现连接问题时,请务必检查控制台是否有关于连接失败的消息。由于Qt无法判断连接是否有意义,直到运行时,它会通知您那里的失败。你认为它会崩溃,但它只是在控制台中悄悄地说出这些东西。 有了Qt,总能看到控制台是有意义的。 Qt打印出各种错误消息,这些消息可以在您遇到问题时提供帮助。
  2. 您可以控制connect功能的结果,所以(来自官方文档)

      

    如果成功连接信号,则该函数返回true   插槽。如果无法创建连接,它将返回false   例如,如果QObject无法验证是否存在任何信号   或方法,或者如果他们的签名不兼容。

  3. 检查您的对象(对话框)是否创建良好且指针不等于NULL

  4. 尝试清除您的项目("清除项目" QtCreator中的命令),甚至手动删除所有ui_*moc_*。然后重新编译它。
  5. 祝你好运!并且,请给我们反馈。