でウィジェットの信号を接続するとき、私は次のクラスがあります:メソッドのinitConnectionsでないようなスロット親ウィジェットスロット
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QStringList pluginsToStart, QWidget *parent = 0);
~MainWindow();
// some other stuff
public slots:
void on_timeDataChanged(logging::TimeValueVector<bool>& aData);
void on_importStarted();
}
と
class DataImporterWidget : public PluginWidget
{
Q_OBJECT
public:
explicit DataImporterWidget(QWidget *parent = 0);
~DataImporterWidget();
void initConnections(QMap<QString, PluginWidget*> pluginWidgetMap);
を、私は、ウィジェットがシグナル・スロットを初期化したいです
void DataImporterWidget::initConnections(QMap<QString, PluginWidget*> pluginWidgetMap)
{
for(Importer* importer : this->getImporterMap().values())
{
connect(importer, SIGNAL(signal_timeDataChanged(logging::TimeValueVector<bool>&)),
parentWidget(), SLOT(on_timeDataChanged(logging::TimeValueVector<bool>&)));
}
connect(this, SIGNAL(signal_importStarted()), parentWidget(), SLOT(on_importStarted()));
}
ImporterはQGroupBoxであり、coGroup ncreteデータインポータタイプ。 これは次のように機能します:ボタンを押すと、DataImporterWidgetが作成され、QMdiAreaにQMdiSubWindowとして追加されます。 DataImporterWidgetを作成するときは、シグナルスロット接続を設定するinitConnections()メソッドを呼び出します。
QObject::connect: No such slot
QMdiSubWindow::on_timeDataChanged(logging::TimeValueVector<bool>&) in src/dataimporter/DataImporterWidget.cpp:81
QObject::connect: No such slot QMdiSubWindow::on_importStarted() in src/dataimporter/DataImporterWidget.cpp:85
QObject::connect: (sender name: 'DataImporterWidget')
スロットがあるので、私はそれを得るなぜ私は理解していない:私はプログラムを実行するとき
は今、私は、次のメッセージが表示されます。 parentWidgetをMainWindowにキャストしても、同じエラーが発生します。
PluginWidgetは、使用しているプラグインのいくつかの共通機能を保持するQWidgetから派生した基本クラスです。 Q_OBJECTを各ベースクラスと派生クラスに配置しましたが、このエラーが発生します。しかし、MainWindowで接続を設定するとうまくいきますが、なぜ上記の解決法はうまくいかないのでしょうか?
'parentWidget'は' MainWindow'型ではないようです。 – m7913d
これは、Qt 5で導入された[new signal slot syntax](https://wiki.qt.io/New_Signal_Slot_Syntax)の使用を開始するのに適しています。この方法で、コンパイル時により明確なエラーが発生します。 – MrEricSir
新しい信号スロットの構文を使用すると、MainWindowクラスのslotメソッドのセグメンテーション違反でプログラムがクラッシュします。 –