2011-08-29 10 views
5

Pasé el fin de semana tratando de resolver esto y estoy en el último paso. Mi objetivo: lograr que visual studio 2010 y Qt 4.7.3 trabajen juntos.Visual Studio 2010 Qt Enlace Problema

I instalado Qt de la fuente, especificando para construir con la siguiente configuración:

configure.exe y liberación -debug -opensource -platform win32-msvc2010 -no-webkit -no-fonón -no-fonón -backend -no-script -no-scripttools -no-qt3support -no-multimedia -no-ltcg

Después de la configuración, ejecuté nmake, sin problemas.

En mi solución visual studio 2010, tengo dos proyectos. Image Se queja de que no puede vincular las bibliotecas de Qt. En las propiedades comunes

AssetIO se construyó originalmente utilizando el Qt IDE, y utilicé el complemento Qt en el estudio visual para importar el proyecto. Compilando el proyecto AssetIO funciona perfectamente bien. Sin embargo, al compilar los resultados del proyecto Corto en los siguientes errores del enlazador: LinkerErrors Haga clic con el botón derecho en el proyecto Corto, seleccione propiedades. Agregué AssetIO como referencia. Al hacer clic en las propiedades de configuración, Directorios de VC++, tengo los siguientes directorios de inclusión añadido:

Include Directories Éstos son los archivos de la biblioteca que tengo para el proyecto: Library Directories En lugar de publicar más fotografías en pantalla, Mi incluir directorios para el AssetIO proyecto es: C: \ qt_source \ 4.7.3 \ incluyen

mi directorio de la biblioteca para el proyecto AssetIO es: C: \ qt_source \ 4.7.3 \ bin

Aquí está el código fuente simple de el proyecto que estoy tratando de obtener trabajando g (mi proyecto de prueba sencilla)

main.cpp 
int main(int argc, char* argv[]) 
{ 
    AssetIO::LevelLoader a; 
    a.dostuff(); 

    return 0; 
} 

LevelLoader.h

#ifndef LEVELLOADER_HPP 
#define LEVELLOADER_HPP 

namespace AssetIO 
{ 
    class LevelLoader { 
    public: 
     explicit LevelLoader(); 
     ~LevelLoader(); 

     void dostuff(); 
    }; 
} 

#endif // LEVELLOADER_HPP 

LevelLoader.cpp

#include "LevelLoader.hpp" 
#include <QDomDocument> 
#include <QFile> 
#include <QDebug> 
#include <QString> 

using namespace AssetIO; 

enum ComponentType { Drawable = 0, Position }; 

// This will definitely be changed, to return a full-blown component. Passing the tagname directly to the 
// component factory. 
ComponentType ConvertToComponentType(QString tagName) 
{ 
if(tagName.toLower() == "Drawable") { 
    return Drawable; 
} 
else if(tagName.toLower() == "Position") { 
    return Position; 
} 
else { 
    // LOG 
    exit(EXIT_FAILURE); 
} 
} 

LevelLoader::LevelLoader() 
{ 
} 

LevelLoader::~LevelLoader() 
{ 
} 

void LevelLoader::dostuff() 
{ 
QDomDocument doc("la"); 
QFile file("../../../Resources/input.sto"); 

if(!file.open(QIODevice::ReadOnly)) { 
    // TODO: log this, something 
    exit(EXIT_FAILURE); 
} 

if(!doc.setContent(&file)) { 
    // TODO: log 
    file.close(); 
} 
// we close the file now the doc has control (i think) 
file.close(); 

// Read the root element 
QDomElement root = doc.documentElement(); 
if(root.tagName() != "Root") { 
    // TODO: log 
    exit(EXIT_FAILURE); 
} 

// Read the Header Info 
QDomNode headerNode = root.firstChild(); 

QDomElement e = headerNode.toElement(); 
if(e.tagName().toLower() != "HeaderInfo") { 
    // LOG 
} 

QDomNodeList componentNode = headerNode.childNodes(); 
int s = componentNode.count(); 

QString componentTag(componentNode.at(0).toElement().tagName()); 
QDomNamedNodeMap a = componentNode.at(0).attributes(); 
} 

No puedo imaginar lo que estoy haciendo incorrectamente. ¿Alguien tiene alguna idea? He buscado una solución en todas partes.

Respuesta

5

¿No olvidó especificar los archivos Qt lib para VS para vincular? Es probable que necesite QtCored4.lib, QtGuid4.lib (d es para "depurar", eliminarlo en la configuración de lanzamiento) y, tal vez, algunos otros. Si el proyecto que le causa problemas es la aplicación .exe - vaya a Propiedades -> Enlazador -> Línea de comandos y agregue {Qored4.lib QtGuid4.lib} sin los corchetes.

P. S. Mi recomendación: primero, crea un proyecto en Qt Creator y pruébalo. Luego ejecute qmake -tp vc -r - y obtendrá una solución perfectamente funcional para VS o cualquier otra plataforma importante. Además, Creator tiene un buen editor, te puede gustar.

+0

Lo tengo que trabajar, ejecutando qmake con argumentos de comando, ¿quiere decir desde la línea de comando correcta? Planeo usar Qt como editor, es muy bueno. Solo quería poder ingresar a mi proyecto assetIO cuando estaba depurando el exe en Visual Studio 2010. – Short

4

Veo que los directorios de su biblioteca faltan C:\qt_source\4.7.3\lib, inclúyalo.

Y entonces incluyen

QtCored4.lib QtGuid4.lib y cualquier otra biblioteca Qt

requerido como sugirió Violeta jirafa. También es necesario hacer esto con 'versión Release'

QtCore4.lib QtGui4.lib y cualquier otra biblioteca Qt

CV

1

si u han creado instancia de la clase QtQDomDocument. podría ser necesario agregar "QtXml4.lib". Agregue esta lib en Visual Studio, por ejemplo, Project->properties->Linker->Input====> Additional Dependencies.