2017-08-28 4 views
0

Je dois invoquer une méthode de ma classe MainWindow, héritant de QMainWindow classe d'une classe en dehors MainWindow, quelque chose comme ceci:Comment puis-je appeler une méthode à partir de QMainWindow?

Q_ASSERT(QMetaObject::invokeMethod(mainWindow, "attachmentDownloadComplete")); 

mainWindow est de classe MainWindow : public QMainWindow Type

l'erreur est:

no matching function for call to 'QMetaObject::invokeMethod(MainWindow*&, const char [27])' 
    Q_ASSERT(QMetaObject::invokeMethod(mainWindow, "attachmentDownloadComplete")); 

Ma question est comment puis-je appeler appeler cette méthode?

+0

Êtes-vous sûr que vous avez déclaré 'attachmentDownloadComplete' en tant que signal ou fente? – Macias

+0

Oui, c'est déclaré comme slot. – Jack

+0

Pouvez-vous montrer comment vous l'avez déclaré? – eyllanesc

Répondre

0

Le problème est que l'emplacement que vous essayez d'invoquer possède un argument d'entrée.

Lorsque vous avez un argument d'entrée vous devez spécifier l'argument avec Q_ARG.

ex:

Dans ma fenêtre principale, j'ai une fente, comme indiqué ci-dessous.

public slots: 

    void doSomeTest(const char* name) { std::cout << "testing Something"; } 

Dans un autre fichier lors de l'appel, procédez comme indiqué ci-dessous. Testé et fonctionne comme prévu.

QMetaObject::invokeMethod(mainWin, "doSomeTest", Q_ARG(const char*, "test test")); 

Le premier paramètre - Votre principal objet de la fenêtre.

Deuxième paramètre - Le nom du logement. À partir de la troisième sur tous vos paramètres d'entrée avec les types.

Si vous avez une utilisation type de retour

Q_RETURN_ARG(RETURN_TYPE, RETURN_VALUE_PARAMETER),