2009-12-30 9 views
2

Est-il possible d'utiliser les signaux sans MOC et sans les noms de connexion? Mon seul problème avec Qt est que vous avez quelque chose commeQt, Signals sans nommer?

this->connect(this->SaveBtn, SIGNAL(click()), SLOT(SaveClicked()));

Et il n'y a pas de détection d'erreur de dire qui ne va pas autre puis trouver le bouton ne fonctionne pas ou la recherche dans leur documentation pour trouver le signal doesn n'existe pas. Aussi, il semble inutile et un gaspillage de cycles de se connecter via des noms au lieu de classes.

+3

En fait, lorsque le signal n'existe pas ou la connexion échoue, un message de débogage ressortira. Si vous utilisez un IDE, ou si vous compilez votre programme pour avoir une fenêtre de console, vous verrez le message de débogage. – blwy10

Répondre

8

La fonction connect renvoie la valeur false lorsqu'elle ne parvient pas à se connecter, et un avertissement est généré en cas d'erreur standard (ou, sous Windows, à l'endroit bizarre lu par DebugView). Vous pouvez également transformer ces avertissements en erreurs fatales en définissant QT_FATAL_WARNINGS=1 dans votre environnement.

Il est inutile de ne pas se connecter par son nom. Par exemple, cela signifie que des connexions peuvent être établies où les noms de signal/emplacement sont générés lors de l'exécution.

+0

Vous pouvez également voir la sortie de débogage dans la fenêtre "Sortie" de Visual Studio lors du débogage. –

+0

+1 - merci pour le QT_FATAL_WARNINGS - ne savait pas à ce sujet. – JimDaniel

0

Autre que le fait que les signaux ne sont que des méthodes, non, je ne pense pas que vous pouvez les utiliser comme ils sont destinés sans l'étape intermédiaire MOC. C'est une douleur quand vous dérangez la connexion et il n'y a pas de drapeau levé. Que signifie votre dernière phrase? Pouvez-vous préciser quel est votre problème? Signals/Slots n'est pas un système parfait, je ne pense pas qu'un système parfait existe, mais il est assez intuitif et a bien fonctionné pour moi.

+0

Eh bien pourquoi se connecter avec des noms lorsque vous pouvez avoir un tableau de callbacks? – user230821

+0

Même avec un tableau de callbacks, je ne peux même pas penser comment cela fonctionnerait sans avoir à spécifier à un moment donné ce qui doit se connecter à ce que, en utilisant des noms. Comment pensez-vous que cela devrait fonctionner spécifiquement? – JimDaniel

+0

Eh bien personnellement, je voudrais une bibliothèque gui qui le fait comme. Net avec des événements. J'utiliserais simplement .net mais je ne veux pas limiter mon projet à l'utilisation du framework .net installé. Surtout juste pour une interface graphique. – user230821

0

Non, il n'y a pas de véritable moyen de contourner cela.

Vous devez utiliser MOC et se connecter via des noms. Mais avec le temps, vous découvrirez qu'il "pousse sur vous" et ne vous dérangera pas vraiment. Entraînez-vous à ajouter du code dans de petits extraits à chaque fois, en testant que ce que vous avez ajouté fonctionne, et vous n'aurez aucun problème avec cela.

0

je pratique normalement suivant le style de codage,

m_pCancelPushButton = new QPushButton(tr("Cancel")); 
m_pCancelPushButton->setObjectName("CancelButton"); 


//MetaObject Connections 
QMetaObject::connectSlotsByName (this); 

Cela me permet d'écrire du code

void Class_name::on_CancelButton_clicked() 
{ 
//Do your job here. 
    reject(); 
} 

J'espère que cela vous aidera.

Merci, Rahul

Questions connexes