2016-11-09 1 views
0

J'apprends actuellement comment utiliser Qt. Je veux essayer quelques applications simples de traitement d'image en utilisant Qt, et comme je connais déjà CImg, je veux l'utiliser. Je suppose qu'il devrait être possible de le faire, sinon marquer ma question pour la suppression ou quelque chose.Comment faire pour que la bibliothèque CImg fonctionne pour Qt

Ma question est: comment obtenir CImg qui travaille pour Qt? CImg est un fichier d'en-tête. Disons que c'est situé sur mon bureau. Je l'importe en utilisant Qt créateur 4.1.0, en utilisant le "Ajouter un fichier existant ..." dans le menu de droite du dossier d'en-tête. Alors mon menu ressemble à ceci:

my project folder in qt.

Il compile lorsque j'ajoute #include "CImg.h", mais je ne peux pas l'utiliser, même lorsque j'essaye de taper using namespace cimg_library il me dira que cimg_library n'existe pas. J'ai également essayé de créer un fichier d'en-tête et de copier le contenu du CImg.h, mais il échoue ensuite à compiler et le Qt Creator se bloque. Editer: J'ai réussi à améliorer la situation en ajoutant l'emplacement de l'en-tête au code inclus (comme ceci: #include "C:/Users/Marci/Desktop/CImg.h") Je peux maintenant "voir" des choses liées au CImg dans l'environnement de développement, et cela ne dérangera pas moi de ne pas trouver le constructeur pour CImg ou quelque chose comme ça. Cependant quand j'essaye de compiler en employant n'importe quoi lié CImg cela me donnera autour de 20 erreurs d'éditeur de liens. (Code d'erreur: LNK2019) Mon fichier .pro ressemble à ceci:

#------------------------------------------------- 
# 
# 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: après la mise en œuvre des changements PeterT proposés dans son commentaire mon dossier .pro ressemble à ceci:

#------------------------------------------------- 
# 
# 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 

Et mon mainwindow.cpp (dans lequel je suis en train de créer un objet CImg) ressemble à ceci:

#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; 
} 

Les erreurs du compilateur que je reçois sont: erreur: C2871: « cimg_library »: un espace de noms avec ce nom n'existe pas erreur: C2065: 'CImg': identificateur non déclaré erreur: C2062: type 'unsigned char' inattendu

J'espère que c'est assez spécifique.

+1

Copie possible de [Ajout de la bibliothèque externe dans le projet Qt Creator] (http://stackoverflow.com/questions/718447/adding-external-library-into-qt-creator-project) – hyde

+0

Veuillez indiquer si ce doublon a été suggéré résout votre problème. Si ce n'est pas le cas, veuillez clarifier, par exemple en ajoutant le message d'erreur exact que vous obtenez, et en montrant votre fichier .pro – hyde

+0

Je ne comprends pas vraiment la notation dans cette question référencée. Même si c'est une copie de la mienne je ne comprends toujours pas, donc une réponse est nécessaire. Mon fichier .pro après avoir essayé d'implémenter les choses écrites dans cette question ressemble à ceci: http://pastebin.com/ZY7qwaK4. Le message d'erreur que j'obtiens en essayant de taper "using namespace cimg_library" est: erreur: C2871: 'cimg_library': un espace de nommage avec ce nom n'existe pas. –

Répondre

2

Après quelques mois je l'ai compris. Le problème réside dans le fait que CImg utilise un fichier windows .dll pour les fonctions de visualisation de la classe cimg_display. Puisque Qt est indépendant de la plate-forme, il n'aime pas cela. Cependant, vous pouvez le faire fonctionner avec un truc intéressant. Vous devez d'abord inclure normalement le fichier d'en-tête dans le fichier de projet. À mon avis, cela fonctionne, car les compilateurs C et C++ copient simplement le contenu du fichier inclus dans la source. Et grâce à la macro, le compilateur ignorera la classe qui cause des problèmes pour nous.