それで、私は自分の GUI に取り組んできましたが、かなり大きくなったので、メイン ウィンドウと通信する複数のウィジェットに分割することにしました (おそらく、最初からすべきことでした)。GUI の一部を別のウィジェットに分割しましたが、メイン ウィンドウと新しいウィジェットの間で信号とスロットを設定するのに問題があります。
メイン ウィンドウは robotmainwindow と呼ばれ、ウィジェットは robotTabWidget と呼ばれます。robotmainwindow.h で、robotTabWidget を次のように宣言しました。
robotTabWidget* robotttabwidget;
次に、robotmainwindow.cpp でクラスを初期化しました。
robottabwidget = new robotTabWidget();
robotmainwindow に create connections という関数があります。この関数では、robotTabWidget からの信号を robotmainwindow のスロットに接続しようとしています。
void robotmainwindow::createConnections()
{
connect(robottabwidget, &robotTabWidget::sigSendCartCommand, this, &robotmainwindow::slotOnSendCartCommand);
}
シグナル sigSendCartCommand は robottabwidget.h で定義されています。
void sigSendCartCommand(double);
そして robotTabWidget::on_SendCartCommand_clicked() で出力されます:
emit sigSendCartCommand(CartCommand);
しかし、コンパイルしようとすると、接続関数に対して「呼び出しに一致する関数がありません」というメッセージが表示され、「robotTabWidget::sigSendCartCommand(double) は保護されています」というメッセージが表示されます。信号が保護されているのはなぜですか? どこからでも信号を発信できると思っていました。「一致する関数がありません」というエラーが表示されるのはなぜですか?
これは、ここ数日間、私に多くの問題を引き起こしてきましたが、それを理解することができませんでした. よろしくお願いします。
編集:私は物事を変更し、いくつかのことを修正しましたが、まだエラーが発生しています. 接続関数は次のようになります。
QObject::connect(myrobotTabWidget, robotTabWidget::sigTest(test), this, &robotmainwindow::slotOnSendCartCommand);
私が今得ているエラーは、「オブジェクトなしでメンバー関数を呼び出すことはできません」です:
../RobotInterface2/robotmainwindow.cpp:102:68: error: cannot call member function 'void robotTabWidget::sigTest(QString)' without object
QObject::connect(myrobotTabWidget, robotTabWidget::sigTest(test), this, &robotmainwindow::slotOnSendCartCommand);
矢印は robotTabWidget::sigTest(QString) を指しています。これについてどうすればよいかわかりません。何か案は?