© Liashko/Shutterstock.com
Entwickler Magazin
Mithilfe von Interprozesskommunikation C-Programme ausführen

Kurzer Prozess mit Qt

Qt ist ein mächtiges Framework für die Programmierung plattformunabhängiger, grafischer Oberflächen in C++. Es unterstützt Internationalisierung, Webprogrammierung jeder Art, Skriptsprachen, XML, bietet Multimediasupport und stellt diverse Datenbankentreiber bereit. Last but not least können Sie aus einer Qt-Anwendung Programme starten, die in einer anderen Sprache geschrieben wurden sowie deren Ausgabe lesen und verarbeiten. Wie das geht, zeigt dieser Artikel.

Thomas Kaufmann


Bevor es losgeht: Der Artikel richtet sich vornehmlich an Entwickler, die bereits über C++-Kenntnisse verfügen und wenigstens grundlegend mit Qt vertraut sind (Konzepte wie zum Beispiel Signals and Slots werden im Artikel nur skizziert). Mit Java-und C#-Kenntnissen ist es ebenfalls möglich, dem Text zu folgen. Und: Sämtliche Programme wurden unter Ubuntu 12.4 LTS (64 Bit) getestet.

Kurz ein Wort zu Qt: Das Framework wird vielerorts für die verschiedensten Zwecke eingesetzt [1], denn es bietet nahezu unbegrenzte Möglichkeiten für die plattformunabhängige GUI-Entwicklung (GUI = Graphical User Interface). Bekannte Anwendungen sind: KDE, Opera, Google Earth, Skype, Ubuntu13.10 uvm.

Um die Beispiele testen zu können, prüfen Sie bitte, ob Qt und Qt Creator an Bord sind (überdies müssen g++ und make installiert sein). Das geht so:

xxx54@hamlet:~$ qtcreator -versionQt Creator 2.4.1 based on Qt 4.8.1

Falls Qt Creator nicht installiert ist, beziehen Sie die IDE (Integrated Development Environment) unter Ubuntu folgendermaßen:

xxx54@hamlet:~$ sudo apt-get install qtcreator

Auf anderen Linux-Distros rufen Sie einfach den passenden Package Manager auf. Benötigten Sie weiterführende Informationen über Qt Creator, rufen Sie diesen Befehl auf (unter Ubuntu):

apt-cache show qtcreator

Qt Creator startet auf der Kommandozeile so:

xxx54@hamlet:~$ qtcreator &

Wenn Sie jetzt schon neugierig sind, können Sie unter „Projekt öffnen“ (Willkommenansicht von Qt Creator, Abb. 1) das Projekt des Autors einsehen (es heißt qt_process und ist auf www.entwickler.de herunterladbar). Darauf wird später detailliert eingegangen.

Nun zum Thema. Es soll aus einem Qt-GUI ein C-Programm aufgerufen werden. Die Ausgabe dieses Programms wird dann in einem von uns gebauten GUI angezeigt und weiter verarbeitet (mit einer einfachen Suche). Qt stellt für solche Zwecke die Klasse QProcess zur Verfügung, die es im Grunde einfach macht, solche IPC-Mechanismen zu realisieren.

Abb. 1: Die IDE Qt Creator – der Willkommendialog

C wie Client

In Listing 1 sehen Sie das C-Programm. Es handelt sich um einen simplen Netz­werk­client (Stichwort Socket-API), der die index.html vom Heise-Verlag lädt und auf der Konsole ausgibt. In der main-Funktion wird ein TCP-Socket (es gibt auch UDP-Sockets), das ist ein Kommunikationsendpunkt, erzeugt. Die Funktion mem­set() setzt die Struktur sock­addr_in auf 0 (für eine saubere Initialisierung). Diese struct sockaddr_in (hier für IPv4) ist für den Verbindungsaufbau zuständig und erhält im F...

Entwickler Magazin
Mithilfe von Interprozesskommunikation C-Programme ausführen

Kurzer Prozess mit Qt

Qt ist ein mächtiges Framework für die Programmierung plattformunabhängiger, grafischer Oberflächen in C++. Es unterstützt Internationalisierung, Webprogrammierung jeder Art, Skriptsprachen, XML, bietet Multimediasupport und stellt diverse Datenbankentreiber bereit. Last but not least können Sie aus einer Qt-Anwendung Programme starten, die in einer anderen Sprache geschrieben wurden sowie deren Ausgabe lesen und verarbeiten. Wie das geht, zeigt dieser Artikel.

Thomas Kaufmann


Bevor es losgeht: Der Artikel richtet sich vornehmlich an Entwickler, die bereits über C++-Kenntnisse verfügen und wenigstens grundlegend mit Qt vertraut sind (Konzepte wie zum Beispiel Signals and Slots werden im Artikel nur skizziert). Mit Java-und C#-Kenntnissen ist es ebenfalls möglich, dem Text zu folgen. Und: Sämtliche Programme wurden unter Ubuntu 12.4 LTS (64 Bit) getestet.

Kurz ein Wort zu Qt: Das Framework wird vielerorts für die verschiedensten Zwecke eingesetzt [1], denn es bietet nahezu unbegrenzte Möglichkeiten für die plattformunabhängige GUI-Entwicklung (GUI = Graphical User Interface). Bekannte Anwendungen sind: KDE, Opera, Google Earth, Skype, Ubuntu13.10 uvm.

Um die Beispiele testen zu können, prüfen Sie bitte, ob Qt und Qt Creator an Bord sind (überdies müssen g++ und make installiert sein). Das geht so:

xxx54@hamlet:~$ qtcreator -versionQt Creator 2.4.1 based on Qt 4.8.1

Falls Qt Creator nicht installiert ist, beziehen Sie die IDE (Integrated Development Environment) unter Ubuntu folgendermaßen:

xxx54@hamlet:~$ sudo apt-get install qtcreator

Auf anderen Linux-Distros rufen Sie einfach den passenden Package Manager auf. Benötigten Sie weiterführende Informationen über Qt Creator, rufen Sie diesen Befehl auf (unter Ubuntu):

apt-cache show qtcreator

Qt Creator startet auf der Kommandozeile so:

xxx54@hamlet:~$ qtcreator &

Wenn Sie jetzt schon neugierig sind, können Sie unter „Projekt öffnen“ (Willkommenansicht von Qt Creator, Abb. 1) das Projekt des Autors einsehen (es heißt qt_process und ist auf www.entwickler.de herunterladbar). Darauf wird später detailliert eingegangen.

Nun zum Thema. Es soll aus einem Qt-GUI ein C-Programm aufgerufen werden. Die Ausgabe dieses Programms wird dann in einem von uns gebauten GUI angezeigt und weiter verarbeitet (mit einer einfachen Suche). Qt stellt für solche Zwecke die Klasse QProcess zur Verfügung, die es im Grunde einfach macht, solche IPC-Mechanismen zu realisieren.

Abb. 1: Die IDE Qt Creator – der Willkommendialog

C wie Client

In Listing 1 sehen Sie das C-Programm. Es handelt sich um einen simplen Netz­werk­client (Stichwort Socket-API), der die index.html vom Heise-Verlag lädt und auf der Konsole ausgibt. In der main-Funktion wird ein TCP-Socket (es gibt auch UDP-Sockets), das ist ein Kommunikationsendpunkt, erzeugt. Die Funktion mem­set() setzt die Struktur sock­addr_in auf 0 (für eine saubere Initialisierung). Diese struct sockaddr_in (hier für IPv4) ist für den Verbindungsaufbau zuständig und erhält im F...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang