在Visual C ++中使用Qt make库

时间:2015-01-22 11:05:31

标签: c++ visual-studio-2010 qt shared-libraries qt-creator

我用Qt Creator(编译器MSVC2010 32位)创建了一个共享库,用xml文件进行一些操作(当我必须选择模块时,我检查了QtCore,QtXml和QtXmlPatterns)。

以下是lib的代码:

标题:

#ifndef CONVERTERSHARED_H
#define CONVERTERSHARED_H

#include "convertershared_global.h" //created automatically by Qt
#include <QString>

class CONVERTERSHAREDSHARED_EXPORT ConverterShared
{
public:
    ConverterShared();
    bool convert(QString inFileName);
};

#endif // CONVERTERSHARED_H

的.cpp

#include "convertershared.h"

#include <QFile>
#include <QFileInfo>
#include <QDir>
#include <QXmlStreamWriter>
#include <QXmlStreamReader>
#include <QDomDocument>
#include <QMap>

#include <iostream>
#include <fstream>
using namespace std;

ConverterShared::ConverterShared()
{
}

bool ConverterShared::convert(QString inFileName)
{
//process...
}

因此它创建了一个.lib和一个.dll。

当我在Qt项目中使用这个lib(包括包含的路径,.pro中的库,将.dll放在exe目录中)时,一切都很好,我可以创建一个ConverterShared实例并使用convert函数。 / p>

我的问题是在没有使用Qt的Visual Studio(C ++ 2010)项目中使用它。所以在项目的属性中,我补充说:

  • 在C / C ++中 - &gt;一般 - &gt;其他包含目录 - &gt; path / to / convertershared.h(包含convertershared_global.h)

  • 库中的
  • - &gt;一般 - &gt;附加依赖性 - &gt; ConverterShared.lib(使用路径/ ConverterShared.lib测试且没有路径)

  • 库中的
  • - &gt;常规 - &gt;其他库目录 - &gt;路径/到/ lib中

然后,在.cpp文件中,它找到convertershared.h,所以我包含它但是当我编译时,我得到错误:

Cannot open include file QtCore/qglobal.h: No such file or directory
(and then IntelliSense cannot open source file "QtCore/qglobal.h", "QString")

那么如何纠正它并在一个不使用Qt的Visual项目中使用我的Qt lib(编译最终Visual项目的PC并不是必须安装Qt)?

2 个答案:

答案 0 :(得分:3)

我认为您需要定义Qt包含文件的路径,例如qglobal.h等,它们来自您的convertershared_global.h文件。例如,在VS项目的属性页面C/C++ -> General -> Additional Include Directories中添加$(QTDIR)\include\QtCore和其他路径(如有必要),以使编译器找到所有包含。

答案 1 :(得分:1)

如果您将应用程序与使用Qt的共享库链接,您还应该将应用程序与Qt链接并定义包含路径。即使您与Qt链接,您的应用程序也需要QCoreApplication的实例,并且还需要一个事件循环。

在您的情况下,由于您没有Qt应用程序并且想要链接到Qt共享库,您可以在共享库的新线程中创建QCoreApplication的实例,然后运行事件循环正如here所述。

如果您不想将您的应用程序与Qt链接,您可以在运行时加载您的共享库,并使用QLibrary {{1}} {{1}}动态调用它的函数。