Je les classes suivantes:Une telle fente lors de la connexion signal de widget avec fente widget parent
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();
}
et
class DataImporterWidget : public PluginWidget
{
Q_OBJECT
public:
explicit DataImporterWidget(QWidget *parent = 0);
~DataImporterWidget();
void initConnections(QMap<QString, PluginWidget*> pluginWidgetMap);
dans la méthode initConnections, je veux le widget pour initialiser le signal fente connexions comme ceci:
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()));
}
Importateur est un QGroupBox et une classe de base pour les sous-classes dérivées spécifiant co ncrete types d'importateurs de données. Cela fonctionne comme suit: Si j'appuie sur un bouton, un DataImporterWidget est créé et ajouté à un QMdiArea en tant que QMdiSubWindow. Lors de la création de DataImporterWidget, j'appelle la méthode initConnections() qui configure les connexions de slot de signal.
Maintenant, quand je lance le programme, je reçois le message suivant:
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')
Je ne comprends pas pourquoi je reçois parce que l'emplacement est là. Même si je jette le parentWidget à la MainWindow, j'obtiens la même erreur. PluginWidget est juste une classe de base dérivant de QWidget qui contient des fonctionnalités communes pour mes plugins utilisés. Je mets Q_OBJECT sur chaque base et classe dérivée mais j'obtiens toujours cette erreur. Cependant, si je configure les connexions dans MainWindow, cela fonctionne très bien, mais je me demande pourquoi la solution ci-dessus ne fonctionnera pas.
'parentWidget' ne semble pas être de type' MainWindow'. – m7913d
Ce serait le bon moment pour commencer à utiliser la [nouvelle syntaxe de fente de signal] (https://wiki.qt.io/New_Signal_Slot_Syntax) introduite dans Qt 5; De cette façon, vous obtiendrez une erreur plus claire au moment de la compilation. – MrEricSir
Si j'utilise la nouvelle syntaxe d'emplacement de signal, mon programme se bloque avec une erreur de segmentation dans la méthode slot de la classe MainWindow. –