我花了整个周末试图解决这个问题,我正在迈出最后一步。我的目标:让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 - 无LTCG
配置完成后,我运行了nmake,没问题。
在我的visual studio 2010解决方案中,我有两个项目。 它抱怨它无法链接Qt库。在公共属性
中AssetIO最初是使用Qt IDE构建的,我使用Visual Studio中的Qt插件导入项目。编译项目AssetIO工作得非常好。但是,编译Short项目会导致以下链接器错误: 右键单击Short项目,选择属性。我添加了AssetIO作为参考。单击配置属性VC ++目录,我添加了以下Include目录:
以下是我为项目提供的库文件: 而不是发布更多的屏幕截图,我的AssetIO项目的包含目录是: C:\ qt_source \ 4.7.3 \包括
我的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();
}
我无法弄清楚我做错了什么。有没有人有任何想法?我到处寻找解决方案。
答案 0 :(得分:5)
你有没有忘记为VS链接指定Qt lib文件?你可能需要QtCored4.lib,QtGuid4.lib(d代表“debug”,在发布配置中删除它),也许还需要其他一些。如果给您带来麻烦的项目是.exe应用程序 - 转到它的Properties-&gt; Linker-&gt;命令行并添加{Qored4.lib QtGuid4.lib}而不带括号。
P上。 S.我的建议:首先,在Qt Creator中创建一个项目并进行测试。然后运行qmake -tp vc -r - 你将获得VS或任何其他主要平台的完美工作解决方案。此外,Creator有一个很好的编辑器,你可能会喜欢它。
答案 1 :(得分:4)
我发现你的库目录缺少C:\qt_source\4.7.3\lib
,包括它。
然后包括
紫罗兰长颈鹿建议要求QtCored4.lib QtGuid4.lib和任何其他Qt库
。您还需要使用“发布版本”
执行此操作QtCore4.lib QtGui4.lib和任何其他Qt库
CV
答案 2 :(得分:1)
如果您已创建Qt
类QDomDocument
的实例。可能需要添加“QtXml4.lib”。请在Visual Studio中添加此lib,即Project->properties->Linker->Input====> Additional Dependencies
。