2010-02-03 13 views
6

Ich habe eine Konsolenanwendung, die von Bison (ein Parser) generiert und ich möchte eine einfache GUI für sie erstellen, so dass ich eine Eingabe von diesem GUI an die Konsole senden kann und Ausgabe von der Konsole in die GUI. Ich habe versucht, das mit Java-Prozess-Klasse zu tun, aber es funktioniert nicht für mich, bitte helfen Sie mir, dass mit qt zu tun.mit qt: Wie baue ich ein Gui OnTop einer Konsolenanwendung?

Antwort

4

Es hängt von der Komplexität der Daten ab, die Sie in Ihrer Konsolenanwendung ein- und auslagern möchten.

Geringe Komplexität Verwenden Sie einige Befehlsschalter, die Sie von Ihrer Qt-GUI an Ihre Konsolenanwendung übergeben. Schauen Sie sich die QProcess class documentation an.

Hohe Komplexität Ich würde mit einer RPC-ähnlichen Lösung gehen. Schauen Sie sich die QtDBus documentation (nur Linux/Unix).

Hinweis: Ich habe die Annahme gemacht, dass Sie Ihren generierten Bison-Parser getrennt von Ihrer Qt-GUI halten möchten (falls Sie die Regenerierung erneut benötigen).

+0

Befehlszeilenanwendungen haben bereits "rpc like solutions", sie heißen stdin & stdout =) – rasjani

+0

hahaha, right. :) Aber es könnte ein Schmerz sein, zu analysieren, wenn Ihre Konsolenanwendung eine Menge Informationen an sdtout ausgibt. Daher meine zweifache Antwort: niedrige vs hohe Komplexität. ;) –

1

Ich glaube, Sie die folgenden Einträge in Ihrer .proDatei setzen haben:

# Anwendungsvorlage
TEMPLATE = app

# QMake Konfiguration
CONFIG + = Konsole

können Sie Dann erstellen Sie ein Fenster in Qt, und Sie haben Ihr Hauptfenster neben einer Konsole!

Beispiel:

main.cpp 
{ 
    QApplication App(argc, argv); 
    ... 
    MainFrm* pMainFrm = new MainFrm(); 
    pMainFrm->show(); 
    ... 
    int ExitCode = App.exec(); 
    return ExitCode; 
} 

Hoffnung hilft es ein wenig!

+0

aber wie kann ich senden und Ausgabe erhalten ?! – Radi

0

Eine Alternative: Tcl/TK

Es sei denn, Sie haben guten Grund QT verwenden Sie könnte es einfacher finden Tcl/Tk. Tcl zu verwenden, wurde Einrichtungen Scripting und GUI von Grund auf zum Umwickeln von C-Programmen bestehenden und ist bei weitem der einfachste Weg, dies zu tun. Es unterstützt eine ganze Reihe von Möglichkeiten, C-Code und Tk zu integrieren (das mit Tcl/Tk gelieferte GUI-Toolkit) ist recht übersichtlich zu programmieren und sehr einfach zu erlernen (denke: ein 2-stündiges Labor in einem CS-Paper).

Tcl Integrationsfunktionen:

  • Tcl eine Vollduplex-Leitung mit dem Programm öffnen und das Rohr nach unten kommunizieren. Vermutlich ist dies die beste Option für Sie.

  • Sie können fork/exec verwenden, um das Programm unter Übergabe von Befehlszeilenargumenten auszuführen.

  • Sie können den Tcl-Interpreter auch in Ihr C-Programm einbetten; Die API dafür ist todschick.

  • Tcl hat APIs (auch recht einfach), um den Interpreter um neue Befehle zu erweitern.

  • Wahrscheinlich ein oder zwei andere Möglichkeiten, an die ich mich nicht mehr erinnern kann.

1

Halten Sie Ihre Konsole und Ihre grafische Anwendung, zwei getrennte Anwendungen. Sie haben bereits die Konsole, also schauen wir uns an, wie Sie die andere machen können:

Erstellen Sie eine normale GUI-Anwendung in Qt und rufen Sie mit der QProcess-Klasse Ihre Konsolenanwendung auf. Verwenden Sie die Methoden readData() und writeData() (und ähnliche) dieser Klasse, um von der Standardausgabe zu lesen und in die Standardeingabe Ihrer Konsolenanwendung zu schreiben.

Weitere Informationen finden Sie in der Dokumentation QProcess.