QT mit C-Programm verknüpfen
-
Hey Leute,
ich fang gerade an mit QT und hatte von damals noch ein altes C-Projekt da was ich mit QT verknüpfen wollte.
Also das C-Projekt ist eine kleine Shell die meine selbstgeschriebenen Kommandos entgegen nimmt und ausführt. Also sowas wie mkdir, rm, cat, touch, ls, ...
Eingelesen alles über die library readline.int main(int argc, char **argv) { /* code */ while((line = readline("~> ")) != NULL){ /* code */ } }
Ich wollte jetzt mit QT ein Fenster erstellen, das wie ein Terminal arbeitet. Also wo ich dann die Eingabe sehe und mein C-Programm diese Eingabe abfängt und dann das gewünschte ausgibt. Wie bei einem Terminal.
Weiß jemand wie ich das realisieren kann?
-
Mit QProcess kannst du externe Programme starten ( sprich du startest deine Anwendung mit den gewuenschten Parametern ), die Ausgabe erhaeltst du dann ueber
http://developer.qt.nokia.com/doc/qt-4.8/qprocess.html#readAllStandardOutput
-
Danke schon mal für den Tipp.
Ich bin jetzt auf die Klasse QLineEdit und QTextBrowser gestoßen. Ist es möglich das wenn ich eine Eingabe im LineEdit Feld mache diese dann im QTextBrowser angezeigt wird? Wenn ja wie mach ich das genau?
-
Achja hier meine .cpp Datei noch.
#include <QtGui>
#include <qwidget.h>
#include <qapplication.h>
#include <qlabel.h>
#include <qmainwindow.h>int main(int argc, char **argv) { QApplication *app = new QApplication(argc, argv); QMainWindow *mainWindow = new QMainWindow(); QVBoxLayout *layout = new QVBoxLayout(); QWidget *mainwidget = new QWidget(mainWindow); QTextEdit *textEdit = new QTextEdit(); textEdit->setReadOnly(true); QLineEdit *lineEdit = new QLineEdit(); mainwidget->setLayout( layout ); mainWindow->setCentralWidget( mainwidget ); layout->addWidget(textEdit); layout->addWidget(lineEdit); mainWindow->setLayout(layout); mainWindow->setWindowTitle("Test"); mainWindow->setFixedSize(800, 600); QObject::connect(&lineEdit, SIGNAL(returnPressed()), &textEdit, SLOT(append(lineEdit.text()))); mainWindow->show(); return app->exec(); }
-
Habs jetzt nicht ausprobiert aber sieht alles am Anfang OK aus bis auf den connect-Aufruf. Da du textEdit und lineEdit nicht auf dem Stack erstellst brauchst du keine "&" im connect-Aufruf voranstellen, du hast doch beide Objekte schon als Zeiger vorhanden :
bool QObject::connect ( const QObject * sender, const char * signal, const char * method, Qt::ConnectionType type = Qt::AutoConnection ) const
Hmm, das append-Slot erwartet einen String, aber laut Doku sehe ich kein Signal das ein String zurueckgibt, daher wuerde ich an deiner Stelle einen eigenen Slot schreiben der bei returnPressed() aufgerufen wird :
....
void DeineKlasse::deinSlot()
{
textEdit.append(lineEdit.text());
}
....