2

シグナル/スロットオプションを使用して2つのウィジェットを接続しようとしていますが、「そのようなスロットが存在しない」というエラーが発生し続けます。実際のところ、プログラムを書いている間、タイプミスをしないようにCtrl+Spaceを使用しました。

だから私は1つのウィジェットを持っています:

renderArea.h

    クラスrenderArea:public QGraphicsView
    {{
        Q_OBJECT
    公衆:
        renderArea(QWidget * parent = 0);

    void addClothoid(float length、float startCurvature、float endCurvature);

    信号:
        void sendData(float length、float startCurvature、float endCurvature);

    };

renderArea.cpp

    void renderArea :: addClothoid(float length、float startCurvature、float endCurvature)
    {{
        ..。

            sendData(length、startCurvature、endCurvature);を発行します。
        }
    }

2番目のウィジェット:

tableViewList.h

    クラスTableViewList:パブリックQTableView
    {{
        Q_OBJECT

    公衆:
        TableViewList(QWidget * parent = 0);

    保護されたスロット:
        void onClothoidAdded(float length、float startCurvature、float endCurvature);
    };

tableViewList.cpp

    void TableViewList :: onClothoidAdded(float length、float startCurvature、float endCurvature)
    {{

    ..。
    }

およびメインウィジェット:

上記の2つを接続するrenderingwidget.cpp:

    renderWidget :: renderingWidget(QWidget * parent):
            QWidget(親)、
            ui(新しいUi :: renderingWidget)
    {{
        ui-> setupUi(this);

    connect(ui-> graphicsView、SIGNAL(sendData(float、float、float))、ui-> clothoidTable、
                SLOT(onClothoidAdded(float、float、float)));
    }

ui-> graphicsViewはrenderAreaにプロモートされ、ui->clothoidTableはTableViewListにプロモートされました。

では、なぜこのエラーが表示されるのでしょうか。

4

2 に答える 2

3

シグナル/スロットをクラスに追加した後、プロジェクト ファイルを再生成しましたか? ビルドシステムによっては、これが機能するために必要です。

Qt は、シグナル/スロットの動作を実装する追加のコードを生成するために、クラス ヘッダーを前処理する必要があります (cpp ファイルではスキャンしません) (シグナル/スロットの場合、MOC コンパイラを使用します)。クラス X にシグナルまたはスロットが含まれていることを Qt が認識していない場合、そのクラスのメタ情報は生成されません。

プロジェクト ファイル/Make ファイルを再生成することにより、Qt はすべてのファイルを再度スキャンし、MOC コンパイラに必要なコマンドを生成します。

于 2011-08-05T13:08:04.787 に答える
1

あなたのスロットは保護されているため、 には表示されませんrenderingWidget。外部から接続する場合は、公開する必要がありますTableViewList

于 2011-08-05T14:04:50.307 に答える