Проблема с Qt Link в Visual Studio 2010 - PullRequest
5 голосов
/ 29 августа 2011

Я провел выходные, пытаясь понять это, и я на последнем шаге.Моя цель: заставить Visual Studio 2010 и Qt 4.7.3 работать вместе.

Я установил Qt из источника, указав сборку со следующей конфигурацией:

configure.exe -debug-and-release -opensource -platform win32-msvc2010 -no-webkit -no-phonon-no-phonon-backend -no-script -no-scripttools -no-qt3support -no-multimedia -no-ltcg

После настройки я запустил nmake, без проблем.

В моемРешение Visual Studio 2010, у меня есть два проекта.image Он жалуется, что не может связать библиотеки Qt.В общих свойствах

AssetIO изначально был построен с использованием Qt IDE, и я использовал надстройку Qt в Visual Studio для импорта проекта.Компиляция проекта AssetIO работает отлично.Однако компиляция проекта Short приводит к следующим ошибкам компоновщика: LinkerErrors Щелкните правой кнопкой мыши проект Short, выберите свойства.Я добавил AssetIO в качестве ссылки.Нажав на Свойства конфигурации, каталоги VC ++, я добавил следующие добавленные каталоги:

Include Directories Вот файлы библиотеки, которые у меня есть для проекта: Library Directories Вместо того, чтобы публиковать больше скриншотов, я включаюкаталоги для проекта AssetIO: C: \ qt_source \ 4.7.3 \ include

каталог моей библиотеки для проекта AssetIO: C: \ qt_source \ 4.7.3 \ bin

Вотпростой исходный код проекта, который я пытаюсь получить (мой простой тестовый проект)

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();
}

Я не могу понять, что я делаю неправильно.У кого-нибудь есть какие-либо идеи?Я искал везде решение.

Ответы [ 3 ]

5 голосов
/ 29 августа 2011

Разве вы не забыли указать файлы Qt lib для VS для связи? Вам, вероятно, понадобится QtCored4.lib, QtGuid4.lib (d для «отладки», удалите его в конфигурации выпуска) и, возможно, некоторые другие. Если проект, который доставляет вам неприятности, это приложение .exe - перейдите в его Свойства-> Линкер-> Командная строка и добавьте {Qored4.lib QtGuid4.lib} без скобок.

P. S. Моя рекомендация: сначала создайте проект в Qt Creator и протестируйте его. Затем запустите qmake -tp vc -r - и вы получите идеально работающее решение для VS или любой другой крупной платформы. Кроме того, у Creator есть хороший редактор, он вам может понравиться.

4 голосов
/ 29 августа 2011

Я вижу, что в ваших каталогах библиотеки отсутствует C:\qt_source\4.7.3\lib, включите его.

А затем включите

QtCored4.lib QtGuid4.lib и любые другие библиотеки Qt

требуется, как предложил Фиолетовый Жираф. Вы также должны сделать это с помощью «Release version»

QtCore4.lib QtGui4.lib и любые другие библиотеки Qt

CV

1 голос
/ 31 января 2012

, если вы создали экземпляр Qt класса QDomDocument.может быть необходимо добавить «QtXml4.lib».Пожалуйста, добавьте эту библиотеку в Visual Studio, т.е. Project->properties->Linker->Input====> Additional Dependencies.

...