17Fermer19
Kevin KoflerLe 14/04/2008 à 17:13
J'explique l'erreur de la vtable: pour éviter de générer plusieurs copies de la vtable (ce qui fait du boulot pour le linker qui doit en retenir une seule), g++ émet la vtable dans le fichier C++ qui implémente la première fonction virtuelle à ne pas être implémentée inline à l'intérieur de la déclaration de la classe. Or, dans le cas de Qt, cette méthode se trouve dans la macro Q_OBJECT, et son implémentation dans l'objet généré par moc. Donc si tu ne lances pas moc, il te manquera la vtable.

Quant à évènements (dans le contexte de Qt, ce mot signifie "méthodes virtuelles de traîtement d'évènements à surcharger") vs. signaux, ce qu'il faut utiliser dépend du contexte. Normalement, ce sont des signaux, mais quand c'est quelque chose qui est normalement géré par la classe elle-même, un évènement est utilisé pour des raisons de performance. Pour paint, c'est bien l'évènement qu'il faut surcharger, mais dans la plupart des cas, tu es censé passer par des signaux et slots.

Et c'est Qt avec un 't' minuscule!