10
votes

Qt connecter "pas de tel emplacement" lorsque la fente existe définitivement

qt v4.8.0, compilateur VC2010

J'ai un QMainWindow CODE> classe basée et j'essaie d'envoyer des signaux informatiques impliquant Quuid code> p>

Cependant, chaque fois que je l'exécute, je reçois les erreurs: p>

connect(acnInt, SIGNAL(callback_comp_connected(QUuid)),
        this, SLOT(on_comp_connected(QUuid)));


3 commentaires

Avez-vous déjà essayé un propre , exécutez qmake , Build séquence? Parfois, le fichier greated est généré QT est confus.


Oui en effet, la première chose que j'ai essayée! J'ai eu quelques occasions où QMake ou MOC ont été confondus (généralement lors de la promotion d'une classe à un descendant QObject lorsqu'il n'était pas non plus). Dans ce cas, cela n'a fait aucune différence.


Quels sont ces typé privées?


4 Réponses :


6
votes

Vérifiez si ce moc_mainwindow.cpp est dans votre page de création . Ou vous utilisez un autre fichier moc_window.cpp. Parce que pour EX: dans QTCreator, il construit la source à un nouveau répertoire de construction. Et aussi, il utilise de vieux fichiers MOC_CPP si vous essayez d'ouvrir la source dans un emplacement différent.

Ce que j'essaie de dire est que le fichier MOC que vous avez vérifié peut contenir cette définition de logement, mais le compilateur peut utiliser un autre fichier MOC créé précédemment.


4 commentaires

C'était c'était - une manière d'une manière ou d'une autre une moce supplémentaire _ *. Le CPP était arrivé dans le dossier de sortie de la version à la place du dossier MOC, et Netty ne le supprimez pas.


Cette étape propre ne nettoie normalement pas ces fichiers MOC, pour ex: lorsque vous exportez un projet à partir d'un autre système, et exécutez une étape propre dans votre système, comme cela.


Donc, si j'ai un fichier moc_maindwindow.cpp dans mon répertoire de Vuild c'est la cause de cette erreur? Ou si TI n'est pas là? Vous n'êtes pas si clair. J'ai le même problème et j'ai un moc_mainwindow.cpp dans mon dossier de construction. Alors devrais-je le supprimer ou devrais-je être bien comme il est là?


Nettoyez le projet puis la construire. Vérifiez le chemin dans lequel les fichiers MOC sont générés et vérifiez qu'il s'agit de la suppression de l'opération propre. Sinon supprimer tous les fichiers MOC et construire. Si vous ne pouvez toujours pas résoudre celui-ci, copiez le projet (uniquement des fichiers source et non des fichiers binaires) à un chemin différent et essayez de construire la source. Toujours la problématique, examinez la modification que vous avez faite. Vérifiez également si Visual Studio a une autorisation d'écriture sur les annuaires de la corbeille.



0
votes

Vous avez besoin de

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(
      this, SIGNAL(testSendQuuid(QUuid)),
      this, SLOT(on_comp_connected(QUuid))
    );
    QUuid x = QUuid::createUuid();
    emit testSendQuuid(x);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_comp_connected(const QUuid &qcid)
{
    ui->label->setText(qcid.toString());
}


6 commentaires

Hmm, va essayer ça. Semble certainement plausible. Parce que le créateur QT serait incorrectement équitable.


Ce n'est pas ça. Ils "normalisent" la signature de la connexion, tournant les références constantes en valeurs car les deux sont compatibles.


Je suis sûr que vous pouvez les connecter, mais êtes-vous sûr que le MOC les correspondra?


Quel type de correspondance attendez-vous que le MOC fasse? Il ne correspond pas aux signaux des machines à sous. Il construit simplement les informations méta-objet nécessaires pour énumérer des méthodes. Les connexions sont construites au moment de l'exécution et l'OP utilise qObject :: connect , qui est robuste par ces différences de signature mineures.


Const T & T sont équivalents en ce qui concerne les signaux et les machines à sous, et il n'est pas nécessaire de taper le const T &, toujours (et il est encore plus lent au temps d'exécution en raison de la normalisation).


Ils semblent certainement équivalents. Je suis intrigué qu'il y a une différence de temps d'exécution, mais je suppose qu'à la fin de l'envoi, il est probablement nécessaire de copier la sémantique, qui élimine l'avantage normal d'une référence étant un pointeur «plus sûr».



8
votes

J'ai résolu le problème en ajoutant Q_Object Macro dans la classe Mainwindow.


2 commentaires

Merci, c'était mon problème aussi


Merci! Fonctionne comme un charme!



0
votes

J'ai résolu le problème comme celui-ci xxx

dans le constructeur xxx


0 commentaires