Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使CImg库为Qt工作_C++_Qt_Cimg - Fatal编程技术网

C++ 如何使CImg库为Qt工作

C++ 如何使CImg库为Qt工作,c++,qt,cimg,C++,Qt,Cimg,我目前正在学习如何使用Qt。我想试用一些使用Qt的简单图像处理应用程序,因为我已经熟悉CImg,所以我想使用它。我想这应该是可能的,如果不是标记我的问题删除或什么的话 我的问题是:如何让CImg为Qt工作?CImg是一个头文件。假设它位于我的桌面上。我使用Qt creator 4.1.0导入它,方法是使用标题文件夹右键单击菜单中的“添加现有文件…”。然后我的菜单如下所示: #------------------------------------------------- # # Project

我目前正在学习如何使用Qt。我想试用一些使用Qt的简单图像处理应用程序,因为我已经熟悉CImg,所以我想使用它。我想这应该是可能的,如果不是标记我的问题删除或什么的话

我的问题是:如何让CImg为Qt工作?CImg是一个头文件。假设它位于我的桌面上。我使用Qt creator 4.1.0导入它,方法是使用标题文件夹右键单击菜单中的“添加现有文件…”。然后我的菜单如下所示:

#-------------------------------------------------
#
# Project created by QtCreator 2016-11-08T17:08:58
#
#-------------------------------------------------

 QT       += core gui

 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

 TARGET = grayscale
 TEMPLATE = app


SOURCES += main.cpp\
         mainwindow.cpp

HEADERS  += mainwindow.h \
             C:/Users/Marci/Desktop/CImg.h

LIBS += -C:/Users/Marci/Desktop/ -CImg.h

FORMS    += mainwindow.ui
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <CImg.h>

using namespace cimg_library;


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    CImg<unsigned char> myimage(100,200);
}

MainWindow::~MainWindow()
{
    delete ui;
}

当我添加
#include“CImg.h”
时,它会编译,但我无法使用它,即使当我尝试使用命名空间CImg\u library键入
时,它也会告诉我CImg\u library不存在。我还尝试创建一个头文件,并将CImg.h的内容复制到其中,但随后它根本无法编译,Qt创建者冻结

编辑:我通过在include代码中添加标题位置(如:
#include“C:/Users/Marci/Desktop/CImg.h”
)使情况变得更好。我现在可以在开发环境中“查看”与CImg相关的内容,并且不会因为找不到CImg或类似的构造函数而困扰我。然而,当我试图在使用任何与CImg相关的东西时进行编译时,它会给我大约20个链接器错误。(错误代码:LNK2019)My.pro文件如下所示:

#-------------------------------------------------
#
# Project created by QtCreator 2016-11-08T17:08:58
#
#-------------------------------------------------

 QT       += core gui

 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

 TARGET = grayscale
 TEMPLATE = app


SOURCES += main.cpp\
         mainwindow.cpp

HEADERS  += mainwindow.h \
             C:/Users/Marci/Desktop/CImg.h

LIBS += -C:/Users/Marci/Desktop/ -CImg.h

FORMS    += mainwindow.ui
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <CImg.h>

using namespace cimg_library;


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    CImg<unsigned char> myimage(100,200);
}

MainWindow::~MainWindow()
{
    delete ui;
}
Edit2:实施PeterT在其评论中建议的更改后,my.pro文件如下所示:

#-------------------------------------------------
#
# Project created by QtCreator 2016-11-08T17:08:58
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = grayscale
TEMPLATE = app


SOURCES += main.cpp\
         mainwindow.cpp

HEADERS  += mainwindow.h \


INCLUDEPATH += C:/Users/Marci/Desktop

FORMS    += mainwindow.ui
我的mainwindow.cpp(我正试图在其中创建一个CImg对象)如下所示:

#-------------------------------------------------
#
# Project created by QtCreator 2016-11-08T17:08:58
#
#-------------------------------------------------

 QT       += core gui

 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

 TARGET = grayscale
 TEMPLATE = app


SOURCES += main.cpp\
         mainwindow.cpp

HEADERS  += mainwindow.h \
             C:/Users/Marci/Desktop/CImg.h

LIBS += -C:/Users/Marci/Desktop/ -CImg.h

FORMS    += mainwindow.ui
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <CImg.h>

using namespace cimg_library;


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    CImg<unsigned char> myimage(100,200);
}

MainWindow::~MainWindow()
{
    delete ui;
}
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括
使用名称空间cimg_库;
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
cimgmyimage(100200);
}
MainWindow::~MainWindow()
{
删除用户界面;
}
我得到的编译器错误是:错误:C2871:“cimg_库”:具有此名称的命名空间不存在 错误:C2065:“CImg”:未声明的标识符 错误:C2062:意外输入“unsigned char”


我希望这足够具体。

几个月后,我就明白了。问题在于,CImg使用windows.dll文件作为类CImg_display的可视化函数。因为Qt是平台独立的,所以它不喜欢这样。然而,你可以用一个有趣的技巧使它工作。首先,通常需要在项目文件中包含头文件。之后,无论何时实际包含它,都需要编写以下宏:
#定义cimg#U显示0

在我的理解中,这使得它工作,因为C和C++编译器只需将包含的文件的内容复制到源文件中。多亏了宏,编译器将忽略给我们带来麻烦的类。

几个月后,我才明白这一点。问题在于,CImg使用windows.dll文件作为类CImg_display的可视化函数。因为Qt是平台独立的,所以它不喜欢这样。然而,你可以用一个有趣的技巧使它工作。首先,通常需要在项目文件中包含头文件。之后,无论何时实际包含它,都需要编写以下宏:
#定义cimg#U显示0

在我的理解中,这使得它工作,因为C和C++编译器只需将包含的文件的内容复制到源文件中。多亏了宏,编译器将忽略给我们带来麻烦的类。

可能的重复请评论建议的重复是否解决了您的问题。如果没有,请澄清,例如添加您收到的确切错误消息,并显示您的.pro文件。我真的不理解引用问题中的符号。即使它是我的复制品,我还是不明白,所以需要一个答案。在尝试实现该问题中编写的内容后,我的.pro文件如下所示:。尝试键入“使用名称空间cimg_库”时收到的错误消息是:错误:C2871:“cimg_库”:不存在具有此名称的名称空间。@Á.Márton cimg是一个仅标题的库,您不能链接它。删除<代码> LIBS+--C/://MARC/桌面/ -CIMG.H./C>并考虑只使用<代码>包含Debug Posie+C://Cuffs/MARC/桌面> <代码> >包含< < /Cord> >我按照您的建议做了,我删除了LIBS的东西,并从标题部分删除了头访问路径。添加了
INCLUDEPATH+=C:/Users/Marci/Desktop
。我还按照你的建议重写了
#include
。现在它拒绝再次识别与CImg相关的代码。可能的重复请评论建议的重复是否解决了您的问题。如果没有,请澄清,例如添加您收到的确切错误消息,并显示您的.pro文件。我真的不理解引用问题中的符号。即使它是我的复制品,我还是不明白,所以需要一个答案。在尝试实现该问题中编写的内容后,我的.pro文件如下所示:。尝试键入“使用名称空间cimg_库”时收到的错误消息是:错误:C2871:“cimg_库”:不存在具有此名称的名称空间。@Á.Márton cimg是一个仅标题的库,您不能链接它。删除<代码> LIBS+--C/://MARC/桌面/ -CIMG.H./C>并考虑只使用<代码>包含Debug Posie+C://Cuffs/MARC/桌面> <代码> >包含< < /Cord> >我按照您的建议做了,我删除了LIBS的东西,并从标题部分删除了头访问路径。添加了
INCLUDEPATH+=C:/Users/Marci/Desktop
。我还按照你的建议重写了
#include
。现在,它拒绝再次识别与CImg相关的代码。