У меня есть следующие классы:
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);
в методе initConnections я хочу, чтобы виджет инициировал соединения сигнального слота следующим образом:
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 и базовый класс для производных подклассов, определяющих конкретные типы импортеров данных. Это работает так: если я нажму кнопку, 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
. - person m7913d   schedule 30.08.2017