簡體   English   中英

QObject :: connect沒有將信號連接到插槽

[英]QObject::connect not connecting signal to slot

我在我的項目中使用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. 正如邁克在這里所說:出現連接問題時,請務必檢查控制台是否有關於連接失敗的消息。 由於Qt無法判斷連接是否有意義,直到運行時,它會通知您那里的故障。 你會認為它會崩潰,但它只是在控制台中悄悄地說出這些東西。 有了Qt,總能看到控制台是有意義的。 Qt打印出各種錯誤消息,這些消息可以在您遇到問題時提供幫助。
  2. 你可以控制connect功能的結果,所以(從官方文檔)

    如果成功將信號連接到插槽,則該函數返回true。 如果它無法創建連接,它將返回false,例如,如果QObject無法驗證是否存在信號或方法,或者它們的簽名不兼容。

  3. 檢查對象(對話框)是否創建良好,指針不等於NULL

  4. 嘗試清除項目(QtCreator中的“清除項目”命令),甚至手動刪除所有ui_*moc_* 然后重新編譯它。

祝好運! 並且,請給我們反饋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM