Articles

WxWidgets und Magick++ v/s Qt : Meine Erfahrung mit Photopal

Photopal ist der Name einer einfachen Desktop-Anwendung an der ich gearbeitet habe. Der Benutzer kann das Bild einfach per Drag & Drop verschieben und es wird in die vom Benutzer bevorzugte Auflösung umgewandelt (standardmäßig 72dpi). Ziehen Sie eine große Anzahl von Bildern oder Ordnern und es wird sie effizient konvertieren.

Ich habe diese Anwendung mit zwei beliebten Bibliotheken erstellt – wxWidgets und Qt. Ich werde beide zuerst erklären, falls jemand sie benutzen will, und dann werde ich beide vergleichen.

Wie benutzt man WxWidgets in Windows?

Laden Sie den wxWidgets Quellcode von https://www.wxwidgets.org/downloads/ herunter. Entpacken Sie die heruntergeladene Datei.

Nun navigieren Sie unter dem wxWidgets-Ordner zu /build/msw .
Sie werden verschiedene Visual Studio-Projekte mit dem Namen wx_vc gefolgt von der Visual Studio-Version finden, z.B. für Visual Studio 13 ist es wx_vc12 .
Öffnen Sie es in Visual Studio und kompilieren Sie es mit der gewünschten Konfiguration, z.B. Release in x64 .

Die entsprechenden Dateien werden im wxWidgets-Ordner unter dem Ordner include bzw. lib erstellt. Die erforderlichen Dateien für wxWidgets werden generiert.

Um sie in Ihr Projekt einzubinden, öffnen Sie die Eigenschaften Ihres Projekts.
Unter C/C++-Eigenschaften – Registerkarte Allgemein geben Sie den Pfad zu Ihrem (wxWidgets)/include- und (wxWidgets)/include/msvc-Ordner in Zusätzliche Include-Verzeichnisse an.

Unter C/C++ properties – Preprocessor – Preprocessor Definitions , fügen Sie WIN32 , WXUSINGDLL , _WXMSW , wxMSVC_VERSION_AUTO , _UNICODE und UNICODE hinzu.

Nun unter Linker – General – Link Library Dependencies fügen Sie den Pfad zu Ihrem lib/vc Ordner hinzu, der Ihre dll Dateien enthält z.z.B. vc120_x64_dll.
Unter Linker – Input – Additional Dependencies fügen Sie die benötigten lib-Dateien hinzu, z.B. wxmsw31u_core.lib , wxmsw31u_gl.lib und wxbase31u.lib.
WxWidgets ist nun eingerichtet.

Wie benutzt man Magick++ unter Windows?

Laden Sie sich den Magick++ Quellcode herunter https://www.imagemagick.org/script/download.php und entpacken Sie ihn.

Um einen Arbeitsbereich für Ihre Anforderungen zu erstellen, gehen Sie einfach in den Ordner
VisualMagick\configure und öffnen Sie den Arbeitsbereich configure.dsw (für
Visual Studio 6) oder configure.sln (für Visual Studio 7 oder 8).
Setzen Sie die Build-Konfiguration auf Release oder Debug. Erstellen und führen Sie das configure-Programm aus und folgen Sie den Anweisungen auf dem Bildschirm.

Nach einem erfolgreichen Build befinden sich alle erforderlichen Dateien, die zum Ausführen der Kommandozeilen-Tools benötigt werden, im Ordner VisualMagick\bin. Dazu gehören EXE, DLL-Bibliotheken und ImageMagick-Konfigurationsdateien.
Um es in Ihrem Projekt auszuführen, definieren Sie einfach den Verweis auf die Header-Dateien (Include-Verzeichnis) und Lib-Dateien (Lib-Verzeichnis) im Visual Studio.
Fügen Sie auch CORE_RL_Magick++_.lib und CORE_RL_MagickCore_.lib zu den zusätzlichen Abhängigkeiten unter Linker – Input.

Auch die xml-Dateien werden in das Verzeichnis der ausführbaren Datei kopiert.

Jetzt kommt der schwierige Teil, imagemagick läuft nur auf Systemen, auf denen es bereits installiert ist. Um diese Schwierigkeit zu überwinden, laden Sie einfach die exe-Datei von imagemagick herunter. Gehen Sie zu Programme/ imagemagick und kopieren Sie die dll-Dateien in den Ordner coders. Jetzt ist imagemagick bereit, ausgeführt zu werden.

Wie benutzt man WxWidgets in Ubuntu?

Öffnen Sie das Terminal und geben Sie
deb http://apt.wxwidgets.org/ natty-wx main
deb-src http://apt.wxwidgets.org/ natty-wx main

Um eine digitale Signatur hinzuzufügen, geben Sie ein:
curl http://apt.wxwidgets.org/key.asc | sudo apt-key add –

Führen Sie die folgenden Befehle im Terminal aus:
sudo apt-get update
sudo apt-get install wx2.8-headers libwxgtk2.8-0 libwxgtk2.8-dev
cd /usr/include
ls | grep wx
sudo ln -sv wx-2.8/wx wx

Fügen Sie `wx-config – cxxflags` `wx-config -libs` und die erforderlichen wxWidgets-Bibliotheken zum g++-Befehl hinzu, während Sie das WxWidgets-Projekt kompilieren.

Wie benutzt man Magick++ in Ubuntu?

Öffnen Sie das Terminal und bauen Sie die Essentials für Magick++ wie folgt:
sudo apt-get install build-essential checkinstall && apt-get build-dep imagemagick -y

Nun laden Sie ImageMagick herunter, indem Sie folgendes eingeben:
sudo wget http://www.imagemagick.org/download/ImageMagick.tar.gz

Entpacken Sie das tar:
sudo tar xzvf ImageMagick.tar.gz

Führen Sie die folgenden Befehle im Terminal aus :
cd ImageMagick-7.0.4-5
./configure
make clean
make
checkinstall
ldconfig /usr/local/lib
ImageMagick ist bereit, auf Ihrem System zu laufen.

Ansatz 2 – Qt :

Wie benutzt man Qt?

Laden Sie Qt von der offiziellen Website herunter, indem Sie den Online- oder Offline-Installer benutzen – https://www.qt.io/download-open-source/

Nach der Installation öffnen Sie den Qt Creator.Erstellen Sie ein Qt-Projekt und führen Sie es im Release- oder Debug-Modus aus.

Erstellen Sie eine verteilbare Datei in Qt:
Gehen Sie zum C:\Qt\(Version)\(Compiler)\bin . z.B. C:\Qt\5.9.1\msvc2013_64\bin
Öffnen Sie hier das Terminal und führen Sie :
windeployqt (Speicherort Ihrer Binärdatei) aus.
Ihre verteilbare ausführbare Datei zusammen mit der erforderlichen dll wird automatisch erstellt.

Vergleich von WxWidget und Magick++ gegen Qt :

WxWidgets ist nur eine Gui-Bibliothek und benötigte Magick++ für die Bildverarbeitung, während Qt an sich eine vollwertige Bibliothek war und verschiedene Dienstprogramme enthielt, von denen eines die Bildverarbeitung war. Man kann leicht feststellen, dass die Verwendung von Qt weniger komplex ist als WxWidgets. Sogar der Code für Qt ist einfach zu schreiben und zu verstehen.

Aber mit der Einfachheit kommt die Erhöhung der Abstraktionsebene. Qt ist weitaus abstrakter als WxWidgets, was mir bei der Arbeit an pthread in WxWidgets und Qt’s eigenem Thread QThread aufgefallen ist. Es hängt also von Ihrem Anwendungsbereich ab, ob Sie mit Qt oder WxWidgets arbeiten wollen. In meinem speziellen Fall war Qt jedoch die bessere Wahl.

Wenn du irgendwelche Schwierigkeiten bei der Implementierung einer dieser Bibliotheken hast, helfe ich dir gerne.