如何创建可以从C调用的基于Qt的库

时间:2011-12-30 13:26:46

标签: c++ c linux qt qt-creator

我正在尝试构建一个使用Qt功能的简单库(没有事件循环,只是一些图像处理和文件加载),然后从标准的C程序中调用该库。我已经回答了here的答案,但答案没有为我提供足够的信息来解决问题。我已经将库构建为要链接的静态库,并使用extern "C"包装函数调用,但是从/usr/include/QtCore/qnamespace.h:-1: In function ‘QT_MODULE’:/usr/include/QtCore/qnamespace.h:54: error: unknown type name ‘namespace’.开始,我收到了一堆错误

有没有人有关于从C程序链接到Qt库的简短教程?仅供参考,一切都在Linux下(Fedora 15),C程序和Qt库都是用QtCreator构建的。

1 个答案:

答案 0 :(得分:3)

假设你想创建一个包装器来创建和删除QImage,可以这样做:

在您的标头文件中:

typedef void *my_qimage_t;

extern "C" my_qimage_t my_create_qimage(int width, int height);
extern "C" void my_delete_qimage(my_qimage_t image);

在您的源文件中:

extern "C" my_qimage_t my_create_qimage(int width, int height)
{
    QImage *qimage = new Qimage(width, height);
    return static_cast<my_qimage_t>(qimage);
}

extern "C" void my_delete_qimage(my_qimage_t image);
{
    QImage *qimage = static_cast<QImage *>(image);
    delete qimage;
}

从呼叫者的角度来看,my_qimage_t类型是一个黑盒子。所有操作都必须通过你的库完成,方法是传递这个不透明的指针。