在Visual C++中使用Qt制作的库

Use a Qt made library in Visual C++

本文关键字:Qt Visual C++      更新时间:2023-10-16

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

这是库的代码:

页眉:

#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项目中使用此库时(包括包含的路径,.pro中的库,将.dll放入exe目录中),一切都很好,我可以创建ConverterShared的实例并使用转换函数。

我的问题是在不使用Qt的Visual Studio(C++ 2010)项目中使用它。所以在项目的属性中,我添加了:

  • 在 C/C++ 中 -> 常规 -> 其他包含目录 -> path/to/convertershared.h(也包含 convertershared_global.h)

  • 在库中 -> 常规 -> 其他依赖项 -> ConverterShared.lib(使用 path/ConverterShared.lib 和不带路径进行测试)

  • 在库中 ->常规 -> 其他库目录 -> 路径/to/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的可视化项目中使用我的Qt lib(编译最终Visual项目的PC不一定安装了Qt)?

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

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

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

如果不想将应用程序与Qt链接,可以在运行时加载共享库,并使用如下所示的QLibrary动态调用其函数。