0

私は最近C++とQt4の学習に取り組んでいますが、つまずきにぶつかりました。

私は次のクラスと実装を持っています:

class Window : public QWidget
{
public:
    Window();

public slots:
    void run();

private:
    //...
};

Window::Window()
{
    //...

    connect(runBtn,SIGNAL(clicked()),this,SLOT(run()));

    //...
}
Window::run()
{
    //...
}

ただし、ビルドして実行しようとすると、正常にビルドされますが、すぐにメッセージが表示されて終了します。

Object::connect: No such slot QWidget::run()

私が何か間違ったことをしない限り、Qtはスロットを認識していないようですrun()

誰か助けてもらえますか?


アップデート:

コードは次のとおりです。

class Window : public QWidget
{
    Q_OBJECT
public:
    Window(QWidget *parent = 0);

public slots:
    void run();

private:
    //...
};

Window::Window(QWidget *parent) : QWidget(parent)
{
    //...

    connect(runBtn,SIGNAL(clicked()),this,SLOT(run()));

    //...
}
Window::run()
{
    //...
}

プログラムはまだ「予期せず終了」しましたが、そのようなものはもうないことを教えてくれませんQWidget::run()

4

4 に答える 4

8

WindowクラスのQ_OBJECTマクロを忘れた可能性がありますか?

class Window : public QWidget
{
Q_OBJECT
public:
    Window()
...
于 2009-09-08T16:26:26.800 に答える
2

さて、私もこの問題を抱えていて、オンラインで助けを見つけることができませんでした。再コンパイルする前にmoc_*ファイルを削除するのを忘れていて、古いmocファイルを使用して実行可能ファイルを作成していたことがわかりました。これにより、私がコーディングした新しいスロットについて認識できなくなりました。これらの提案の残りすべてが失敗したかどうかを確認します。

最も単純な解決策が最良の解決策である場合もあります...

于 2010-06-11T20:07:07.753 に答える
1

とは何ですかrunBtn、そしてそれはどのように作成されますか?UIファイルの一部として作成されている場合、呼び出していsetupUi()ますか?ウィンドウクラスはどのように作成されていますか?// ...エラーが発生している可能性のあるコード()を省略しているようです。

あなたの問題を非常に小さなコンパイル可能な例に減らすために私が与えることができる最善のアドバイス。これは2つの理由で役立ちます:

  1. 調べるコードが少なくなるため、問題の診断に役立ちます。
  2. それでもサポートが必要な場合は、ダウンロード、コンパイル、デバッグできる完全なコードベースがあるので、サポートに役立ちます多くの場合、問題はあなたが思っている場所ではありません。

お役に立てれば。

于 2009-09-09T07:20:46.580 に答える
0

runBtnは、connectが呼び出された時点ではインスタンス化されていないようです。これは、他の回答の1つによって示されています。

ブレークポイントを使用して、クラッシュが発生している場所を確認します。

于 2009-09-28T12:15:30.550 に答える