c++ - QObject::connect 未将信号连接到插槽

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

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

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()));

重点是我的 commentAddedSlot 已成功连接到它的信号,但 commentAddedSlot 失败了。 有 Q_OBJECT 宏,没有诸如没有 x 插槽之类的警告。除此之外, receivers(SIGNAL(snippetAdded())) 给我 1 但 receivers(SIGNAL(variableAdded())) 给我 0 我使用了命令 qmake -project; qmake 和 make 完全编译。 我错过了什么?

最佳答案

快速查看您的代码并不知道您的问题是什么。

但是,这里有一些时刻:

  1. 正如迈克所说 here :如果出现连接问题,请始终确保检查控制台以获取有关连接失败的消息。由于 Qt 直到运行时才能判断连接是否有意义,因此它会通知您那里的失败。你可能认为它会崩溃,但它只是在控制台中悄悄地说出这些事情。 使用 Qt,始终观察控制台是有意义的。当您遇到问题时,Qt 会打印出各种可以提供帮助的错误消息。
  2. 您可以控制connect 函数的结果,所以(来自官方文档)

    The function returns true if it successfully connects the signal to the slot. It will return false if it cannot create the connection, for example, if QObject is unable to verify the existence of either signal or method, or if their signatures aren't compatible.

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

  4. 尝试清除您的项目(QtCreator 中的“清除项目”命令),甚至手动删除所有ui_*moc_*。然后重新编译它。

祝你好运!并且,请给我们反馈。

关于c++ - QObject::connect 未将信号连接到插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13594677/

相关文章:

c++ - 如何在 XCode 4 中将旧式构建日志设置为默认构建错误 View

C++ 指针与数组的 [] 运算符比较?

android - 从服务中的线程更改主 Activity 用户界面

ios - 如何像在邮件应用程序中一样创建标签?

c++ - 如何在 OpenCV 图像分析中跳过掩码

c++ - C++ 跨平台库和绑定(bind)的最佳文件夹结构

c++ - 如何在Qt中使用翻译?

c++ - 如何访问 Qtitan View 的滚动条?

javascript - 使用 v8 读取二进制文件的函数

python - 将图像添加到 GUI 后,Tkinter GUI 未打开