[英]How to get the CImg library working for Qt
我目前正在學習如何使用Qt。 我想嘗試一些使用Qt的簡單圖像處理應用程序,並且由於我已經熟悉CImg,所以我想使用它。 我想應該可以這樣做,如果沒有將我的問題標記為刪除或其他的話。
我的問題是:如何使CImg為Qt工作? CImg是頭文件。 可以說它位於我的桌面上。 我使用Qt Creator 4.1.0導入它,方法是使用標題文件夾的右鍵菜單中的“添加現有文件...”。 然后我的菜單如下所示:
當我添加#include "CImg.h"
,它會編譯,但是我無法使用它,即使當我嘗試using namespace cimg_library
鍵入using namespace cimg_library
它也會告訴我cimg_library不存在。 我還嘗試僅創建一個頭文件並將CImg.h的內容復制到其中,但是隨后它只是無法編譯,並且Qt Creator凍結了。
編輯:通過將標頭位置添加到包含代碼中,我設法使情況更好(像這樣: #include "C:/Users/Marci/Desktop/CImg.h"
)我現在可以“看到”與CImg相關的東西在開發環境中,沒有找到CImg的構造函數或類似的東西也不會打擾我。 但是,當我嘗試使用與CImg相關的任何東西時進行編譯時,它將給我大約20個鏈接器錯誤。 (錯誤代碼:LNK2019)我的.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
Edit2:在執行PeterT在其注釋中建議的更改之后,我的.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對象)看起來像這樣:
#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;
}
我得到的編譯器錯誤是:錯誤:C2871:'cimg_library':具有該名稱的名稱空間不存在錯誤:C2065:'CImg':未聲明的標識符錯誤:C2062:類型為'unsigned char'的意外
我希望這足夠具體。
幾個月后,我發現了。 問題在於,CImg使用Windows .dll文件來實現cimg_display類的可視化功能。 由於Qt是平台無關的,所以它不是這樣。 但是,您可以使用一個有趣的技巧來使其工作。 首先,您通常需要在項目文件中包括頭文件。 此后,無論何時實際上#include它,您都需要編寫以下宏: #define cimg_display 0
據我所知,它可以正常工作,因為C和C ++編譯器只是將包含文件的內容復制到源代碼中。 多虧了宏,編譯器將忽略對我們造成麻煩的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.