2010-06-29 6 views
2

d'info sys: win xp SP3, Microsoft Visual Studio 2008 Version 9.0.21022.8 RTMProblèmes avec Qt 4.6 VS 2008

Microsoft .NET Framework version 3.5 SP1

Qt Add-in 1.1.5

J'ai installé Qt 4.6.3 à partir du site http://qt.nokia.com/downloads/windows-cpp-vs2008. Puis j'ai ajouté le Add-in Qt 1.1.5 et j'ai configuré la variable PATH.

Lorsque j'ouvre un nouveau projet QT, l'exemple par défaut fonctionne très bien.

Sur le site Nokia (qt), j'ai trouvé quelques exemples mais il semble que les choses ne fonctionnent pas correctement.

Voici un des nombreux exemples qui ne fonctionnent pas:

#include <QtGui> 
#include <QWidget> 

class QLabel; 
class QLineEdit; 
class QTextEdit; 


class AddressBook : public QWidget 
{ 
    Q_OBJECT 

public: 
    AddressBook(QWidget *parent = 0); 

private: 
    QLineEdit *nameLine; 
    QTextEdit *addressText; 
}; 

AddressBook::AddressBook(QWidget *parent) 
    : QWidget(parent) 
{ 
    QLabel *nameLabel = new QLabel(tr("Name:")); 
    nameLine = new QLineEdit; 

    QLabel *addressLabel = new QLabel(tr("Address:")); 
    addressText = new QTextEdit; 

    QGridLayout *mainLayout = new QGridLayout; 
    mainLayout->addWidget(nameLabel, 0, 0); 
    mainLayout->addWidget(nameLine, 0, 1); 
    mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); 
    mainLayout->addWidget(addressText, 1, 1); 

    setLayout(mainLayout); 
    setWindowTitle(tr("Simple Address Book")); 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    AddressBook addressBook; 
    addressBook.show(); 

    return app.exec(); 
} 

compilateur dit ce ::

fenêtre de sortie

Liaison ...

main.obj: erreur LNK2001: symbole externe non résolu "public: struct virtuel QMetaObject const * __thiscall AddressBook :: metaObject (void) const" (? MetaObject @ AddressBook @@ UBEPBUQMetaObject @@ XZ)

main.obj: erreur LNK2001: symbole externe non résolu "public: virtual void * __thiscall AddressBook :: qt_metacast (char const *)" (qt_metacast @ AddressBook @@ UAEPAXPBD @ Z?)

main.obj: erreur LNK2001: symbole externe non résolu "public: int __thiscall AddressBook virtuel :: qt_metacall (ENUM QMetaObject :: Appel, int, void * *)" (qt_metacall @ AddressBook @@ UAEHW4Call @ QMetaObject @@ HPAPAX @ Z?)

main.obj: erreur LNK2001: symbole externe non résolu "public: structure statique QMetaObject const AddressBook :: staticMetaObject" (? staticMetaObject @ AddressBook @@ 2UQMetaObject @@ B)

C: \ Documents and Settings \ nik \ Mes documents \ Visual Studio 2008 \ Projects \ vs_03 \ Debug \ vs_03.exe: erreur fatale LNK1120: 4 unresolved externals

Résultats

Construire journal a été enregistré à " file: // c: \ Documents and Settings \ nik \ Mes documents \ Visual studio 2008 \ Projects \ vs_03 \ vs_03 \ Debug \ BuildLog.htm » vs_03 - 5 erreur (s), 0 avertissement (s)

Il me semble que la chose a à voir avec l'utilisation de la macro Q_OBJECT mais je ne sais pas quoi faire cette chose commence à fonctionner correctement.

l'installation peut-être mal ou ... aucune idée

Toute aide est appréciée.

+0

Semble être lié au MOC. Assurez-vous que le MOC génère un fichier moc _ *. Cpp correspondant à cet exemple. Si c'est le cas, assurez-vous que le fichier moc _ *. Cpp est ajouté au projet. – stinky472

+0

Avez-vous l'expérience avec VS2008-Qt? Avez-vous une explication en quelques étapes? –

+0

Excuses, malheureusement pas. Je fais la plupart de ces choses à partir de la ligne de commande, donc ma suggestion serait analogue à celle de Timo. – stinky472

Répondre

0

Je trouve une solution.

Lire tous les détails concernant l'installation sur cette page >>

http://dcsoft.wordpress.com/?aspxerrorpath=/community_server/blogs/dcsoft/archive/2009/03/06/how-to-setup-qt-4-5-visual-studio-integration.aspx.

Après une journée entière d'étude et de configuration, j'ai finalement réussi à activer QT 4.6.3. sur le VS 2008. Suivez les instructions détaillées et il ne devrait pas y avoir de problème.

Mon problème était que je les options suivantes:

À partir de Qt 4.6, le pré-construit pour Visual Studio 2008 RTM la version LGPL est maintenant . Si cela vous convient, vous pouvez simplement l'installer et passer à INSTALLER VISUAL STUDIO ADD-IN.

C'était faux dans mon cas, donc je vais au chapitre suivant:

TÉLÉCHARGER QT SOURCE CODE

Comme la possibilité de télécharger uniquement le code source Qt est un peu obscurcie sur le site Web de Nokia en cours, s'il vous plaît suivez ces instructions: .............................................. .................................................. .................................................. .................................................. ............................. etc. LISEZ LE SITE.

Pour l'instant tout fonctionne très bien.Il n'y a pas d'erreurs dans le lien. MOC fonctionne bien ...

1

Je ne pense pas que ce soit une mauvaise installation - je suppose que vous utilisez Visual Studio pour construire le projet et dans ce cas, vous devez également lui dire de construire les fichiers _moc.cpp qui auraient dû être générés pour votre carnet d'adresses de classe.

Si elles n'ont pas été générées, vous devez également exécuter moc sur les fichiers d'en-tête pour AddressBook.

+0

Du site: http://dcsoft.wordpress.com/?aspxerrorpath=/community_server/blogs/dcsoft/archive/2009/03/06/how-to-setup-qt-4-5-visual- studio-integration.aspx 1. Téléchargez et installez le complément Qt Visual Studio pour installer le plug-in Qt dans Visual Studio (les versions 2005 et 2008 sont prises en charge par le complément). 2. Démarrez Visual Studio. 3. Sélectionnez le menu Qt | Configurer les versions Qt Ajoutez c: \ qt \ 4.6.3. 4. Maintenant, Qt est entièrement fonctionnel et vous pouvez utiliser VS2005/2008 pour créer des applications Qt. Il me semble que c'est fait par VS automatiquement par cela comme il est dit. PAS CERTAIN ! –

+0

@ nik_02 - les erreurs que vous voyez sont les erreurs typiques que vous obtenez lorsque les fichiers _moc.cpp ne sont pas générés ou compilés. J'utilise VS2008 pour créer des applications QT mais je n'utilise pas le plugin donc les choses pourraient être légèrement différentes. Néanmoins, vous devez vérifier que ces fichiers sont générés et compilés pour se débarrasser de l'erreur de lien. –

+0

OK, merci pour votre aide. –

1

Chaque fois que vous avez besoin de moc pour exécuter vos fichiers et que vous n'avez pas votre classe dans un en-tête et un fichier d'implémentation distincts, vous devez avoir un #include "FILENAME.moc" à la fin de votre fichier. Si vous deviez ajouter cela après votre fonction main, tout devrait fonctionner.

Vous devriez être en mesure de tester en allant dans votre répertoire de projet et de faire ce qui suit:

  • Supprimer les fichiers makefile qui peuvent être présents
  • Exécutez la commande Visual Studio Invite
    • Run qmake -projet pour générer un fichier de projet
    • Exécuter qmake pour générer les fichiers makefiles
    • Run nmake pour construire le projet

La commande doit nmake complètement avec succès et sans lien avec les erreurs sur un projet simple comme ci-dessus. Pour les projets plus complexes, vous devrez peut-être modifier le fichier .pro pour inclure Qt`s webkit ou rendre accessibles des options qui ne sont pas disponibles par défaut.

L'alternative consiste à déplacer la définition de classe pour AddressBook dans un fichier d'en-tête avec un fichier d'implémentation approprié (cpp/cxx).

+0

Merci. En attendant, j'ai fait l'installation de Qt à partir de (construire votre propre version) et tout fonctionne comme prévu. C'était de ma faute parce que j'utilisais à l'origine une version pré-construite de Qt. –

+0

J'ai toujours utilisé la version pré-construite (commerciale) de Qt sans problèmes. Tant que la version pré-compilée correspond à votre compilateur (c'est-à-dire MSVC vs. GCC), vous ne devriez avoir aucun problème. –

Questions connexes