Wie man problemlos mehrere Dateien mit seiner Software im Binary mitliefert, zeigt dieses Video. Ich gehe zusätzlich darauf ein, wie man Mehrsprachresources benutzt.
Kategorie: IT
Qt-Tutorial 039: Multisprachanwendungen / Mehrsprachanwendungen
Dieses Video zeigt, wie einfach es mit Qt ist, Software in mehreren Sprachen auszuliefern.
So sieht unsere Beispielanwendung aus:
wxWidgets-Tutorial 007 – wxWidgets auf macOS – App-Bundles, Icons und Deployment
Dieses Video zeigt, wie ihr einfach App-Bundles inklusive Icons für eure wxWidgets-Programme auf macOS erstellen könnt. Ebenfalls gehe ich auf den dylibbundler ein, um ein einfache Deployment durchzuführen.
Hier noch die Dateien:
Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key> <string>English</string>
<key>CFBundleExecutable</key> <string>wx</string>
<key>CFBundleInfoDictionaryVersion</key> <string>6.0</string>
<key>CFBundlePackageType</key> <string>APPL</string>
<key>CSResourcesFileMapped</key> <true/>
<key>CFBundleVersion</key> <string>0.0.1</string>
<key>CFBundleShortVersionString</key> <string>0.0.1</string>
<key>CFBundleName</key> <string>My wxApp</string>
<key>CFBundleIconFile</key> <string>AppIcon</string>
</dict>
</plist>
Script zum Kompilieren
#!/bin/sh
PROGRAM="wx"
BUNDLE="wx.app"
ICON="AppIcon.icns"
test -d "${BUNDLE}" && rm -Rf "${BUNDLE}"
c++ *.cpp -o wx -std=c++11 `/usr/local/Cellar/wxWidgets/3.2.1/bin/wx-config --libs --cppflags`
if [ $? == 0 ]
then
mkdir -p "${BUNDLE}/Contents/MacOS"
echo -n 'APPL????' > "${BUNDLE}/Contents/PkgInfo"
mv "${PROGRAM}" "${BUNDLE}/Contents/MacOS/"
cp "Info.plist" "${BUNDLE}/Contents/"
mkdir -p "${BUNDLE}/Contents/Resources"
cp "${ICON}" "${BUNDLE}/Contents/Resources/"
mkdir "${BUNDLE}/Contents/lib" && ln -s "${BUNDLE}/Contents/lib" "${BUNDLE}/Contents/libs"
/usr/local/Cellar/dylibbundler/1.0.4/bin/dylibbundler -od -b -x "${BUNDLE}/Contents/MacOS/${PROGRAM}" -d "${BUNDLE}/Contents/lib"
fi
Programmcode
#include <wx/wx.h>
class MyApp : public wxApp {
public:
bool OnInit();
};
class MyFrame : public wxFrame {
public:
MyFrame();
};
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit() {
MyFrame *myFrame = new MyFrame;
myFrame->Show();
SetTopWindow(myFrame);
return true;
}
MyFrame::MyFrame() : wxFrame(nullptr, wxID_ANY, "Meine wx-App") {
wxStaticText *staticText = new wxStaticText(this, wxID_ANY, "Hello World");
}
wxWidgets-Tutorial 006 – wxWidgets auf macOS installieren und ein erstes Beispielprojekt
In diesem Video zeige ich, wie man wxWidgets mit Hilfe von Homebrew auf macOS installieren kann.
Eine kurze Zusammenfassung:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install wxwidgets
brew install dylibbundler
So sieht es dann aus:
Hier noch der Programmcode zum Testen:
#include <wx/wx.h>
class MyApp : public wxApp {
public:
bool OnInit();
};
class MyFrame : public wxFrame {
public:
MyFrame();
};
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit() {
MyFrame *myFrame = new MyFrame;
myFrame->Show();
SetTopWindow(myFrame);
return true;
}
MyFrame::MyFrame() : wxFrame(nullptr, wxID_ANY, "Meine wx-App") {
wxStaticText *staticText = new wxStaticText(this, wxID_ANY, "Hello World");
}
Kompiliert wird das ganze via:
c++ *.cpp -o mywxapp -std=c++11 `/usr/local/Cellar/wxwidgets/3.2.0_1/bin/wx-config --libs --cppflags`
Wer wxWidgets auf macOS selbst kompilieren möchte, findet hier eine Anleitung.
wxWidgets-Tutorial 005 – wxWidgets auf FreeBSD installieren und ein erstes Beispielprojekt
Dieses Video zeigt, wie einfach die Installation von wxWidgets unter FreeBSD geht.
wxWidgets ist einfach installierbar:
pkg install wx31-gtk3
Hier das Beispielprogramm:
#include <wx/wx.h>
class MyApp : public wxApp {
public:
bool OnInit();
};
class MyFrame : public wxFrame {
public:
MyFrame();
};
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit() {
MyFrame *myFrame = new MyFrame;
myFrame->Show();
SetTopWindow(myFrame);
return true;
}
MyFrame::MyFrame() : wxFrame(nullptr, wxID_ANY, "Meine wx-App") {
wxStaticText *staticText = new wxStaticText(this, wxID_ANY, "Hello World");
}
Und so wird es kompiliert:
c++ *.cpp -o mywxapp `wxgtk3u-3.1-config --libs --cppflags` -std=c++11
Folgendermaßen sieht es dann aus:
wxWidgets-Tutorial 004 – wxWidgets auf Ubuntu-Linux installieren und ein erstes Beispielprojekt
In diesem Video zeige ich, wie man wxWidgets unter Linux, in unserem Szenario Ubuntu, installieren kann.
Installiert werden kann wxWidgets folgendermaßen:
sudo apt install libwxgtk3.0-gtk3-dev
Hier der Quellcode von unserer Test-Anwendung:
#include <wx/wx.h>
class MyApp : public wxApp {
public:
bool OnInit();
};
class MyFrame : public wxFrame {
public:
MyFrame();
};
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit() {
MyFrame *myFrame = new MyFrame;
myFrame->Show();
SetTopWindow(myFrame);
return true;
}
MyFrame::MyFrame() : wxFrame(nullptr, wxID_ANY, "Meine wx-App") {
wxStaticText *staticText = new wxStaticText(this, wxID_ANY, "Hello World");
}
Und so wird es kompiliert:
c++ mywxapp.cpp -o mywxapp `wx-config --libs --cppflags` -std=c++11
Danach sieht es in etwa so aus:
wxWidgets-Tutorial 003 – wxWidgets auf Windows mit Visual Studio kompilieren und ein erstes Beispielprojekt
Dieses Video zeigt, wie man wxWidgets selbst auf Windows mit Hilfe von Visual Studio (nicht Visual Studio Code) kompilieren und benutzen kann.
Zuerst muss das wxWidgets.zip für Windows heruntergeladen werden. Unter build öffnet man dann die zum installierten Visual Studio passende Projektdatei. Dann kompliert man (Projektmappe erstellen) für mindestens folgende Plattformen:
- Win32 / Debug
- Win32 / Release
- x64 / Debug
- x64 / Release
In den Projekteinstellugen des eigenen Projekts stellt man die Konfiguration für Plattform und Modus auf Alle. Dann fügt man die Include-Verzeichnisse (include und include/msvc) hinzu. Unter System wird von Console auf Windows umgestellt. Abschließend wählt man Win32 aus und fügt den entsprechenden Bibliothekspfad hinzu. Das selbe mit x64.
Ich zeige das genau in dem Video.
Hier noch der Quelltext unserer Testanwendung:
#include <wx/wx.h>
class MyApp : public wxApp {
public:
bool OnInit();
};
class MyFrame : public wxFrame {
public:
MyFrame();
};
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit() {
MyFrame *myFrame = new MyFrame;
myFrame->Show();
SetTopWindow(myFrame);
return true;
}
MyFrame::MyFrame() : wxFrame(nullptr, wxID_ANY, "Meine wx-App") {
wxStaticText *staticText = new wxStaticText(this, wxID_ANY, "Hello World");
}
So sieht es dann aus:
Wer nicht Visual Studio benutzen möchte, kann hier einmal nachsehen, wie man wxWidgets ohne Visual Studio kompiliert.
Kurztipp: bhyve auf FreeBSD mit vm-bhyve
Alle nutzen Jira. Ich hatte das seinerzeit mal bei der CGM nutzen müssen, wollte mir aber auch mal wieder die aktuelle Version ansehen, um wenigstens sagen zu können: ich kenne es (Pssst: Redmine gefällt mir von der Übersicht und Usability aber weitaus besser – Geschmackssache).
Da ich hier nur FreeBSD-Server rumstehen habe, dachte ich mir: Da gibt’s ja bhyve. Angesehen und aus Zeitgründen wieder verworfen, da ich mich nicht ewig mit der Bedienung auseinandersetzen wollte und konnte. Irgendwann stieß ich dann auf vm-bhyve, einem kleinen Konsolenprogramm, dass eine ähnliche Bedienung wie die anderen administrativen Programme unter FreeBSD bietet (geli, gstat, gpart…).
Auf meinem Server (Intel(R) Xeon(R) CPU E3-1220L V2 @ 2.30GHz) habe ich es dann auch direkt installiert und wollte Ubuntu virtualisieren, genauer: Ubuntu Server. Die Installation lief auch mit dem bei bhyve-vm mitglieferten Template durch, bootete aber nicht, sondern blieb im Grub hängen. Irgendwo in den Tiefen des Internet fand ich dann, dass man LVM bei der Installation weglassen sollte. Gemacht, funktionierte aber genauso schlecht.
Was dann aber funktionierte, und das absolut reibungslos, war die Installation von Debian. Das installierte sich problemlos und bootete durch. Jira und die geforderten Abhängigkeiten waren auch in ein paar Minuten installiert und liefen direkt, so dass ich mir Jira noch einmal genauer ansehen konnte.
Wer also mit FreeBSD (mit allen Features und Einschränkungen) als Hypervisor liebäugelt, dem sei angeraten, sich einmal vm-bhyve anszusehen.
wxWidgets-Tutorial 002 – Ich mache einen wxWidgets-Kurs
In diesem Video gebe ich einen ganz kurzen Überblick, was wxWidgets ist.
wxWidgets ist eine riesige C++-Bibliothek mit etlichen Sprachbinding (s. Wikipedia).
Wie man damit arbeitet, zeige ich in den folgenden Videos.
Eines meiner eigenen Projekte ist komplett in wxWidgets gebaut: Warehouse (GitHub).
YouTube-Video-Kurztipp: Lazarus und FreePascal
Viele mögen das gar nicht auf dem Schirm haben. Neben Rust, Go, Kotlin, TypeScript, Lua und wie sie alle heißen, gibt es auch die alten Vertreter. Klar, Java, C, C++, C#, Assembler … aber auch Pascal.
In diesem Video gehe ich kurz darauf ein, worum es bei FreePascal und Lazarus geht. Ich wünsche viel Spaß.