Qt mit Konsolenanwengung vereinen



  • Hi, ich hab eine Konsolenanwendung, die ich gerne weiterhin verwenden möchte. Nun möchte ich in dieser Anwendung an einem bestimmten Punkt ein QT Fenster erscheinen lassen. Irgendwie klappt das aber nicht.
    Wenn ich das Projekt normal mit qmake, qmake -project, make ausführe, öffnet der nicht mal mehr die Konsole. Das Qt Fenster öffnet sich schon. Wenn ich den Code vom QT Fenster ausblende, öffnet sich nix mehr.

    Geht das nicht, das man Konsolenanwendung mit QT Fenstern "vermischt" ?



  • welche umgebung (win/lin, compiler)?

    machst du in der main funktion QApplication app... und dann app.exec();?

    ist das Qt fenster ein dialog? die sollten glaub ich auch ohne app.exec() gehn.

    hast du in der konsolenanwendung ein- und ausgabe?



  • Etwas Quellcode wäre nicht schlecht. Der Start der Applikation und den Punkt wo sich dein Fenster zeigen soll. Poste doch außerdem mal bitte dein pro-file.



  • aus der QProcess Doku, welche benutzt wird, nehm ich mal an ...

    Processes have two predefined output channels: The standard output channel (stdout) supplies regular console output, and the standard error channel (stderr) usually supplies the errors that are printed by the process. These channels represent two separate streams of data. You can toggle between them by calling setReadChannel(). QProcess emits readyRead() when data is available on the current read channel.

    das heisst, dein Aufrufender Prozess lenkt die standard channels (stdin, stdout, stderr) des neuen prozesses auf eigene Streamobjecte um, und verhaelt sich selber wie nen Stream (QIODevice)

    du musst also nur von dem QProcess lesen (read) und das kannst direkt wieder woandershin schieben .... im besten fall in ein Widget was den text einfach darstellt. und voila, schon laufen die meldungen die auf der console kommen wuerden im fenster deines Hauptprogrammes ab ...

    Ciao ...



  • Hallo,
    @RHBaum
    wieso QProcess?

    Es geht um eine Anwendung er will doch nur das in der Anwendung (innerhalb einer Konsolen-Anwendung) ein QWidget erscheint, dazu brauch er doch kein QProcess, die Daten kann man auch via Pointer an das QWidget übergeben, finde ich sinnvoller.

    Wenn er QWidgets sehen will muss QtGui im pro-file drinne stehen und eventuell in der main.cpp noch was abgeändert werden.

    so long
    jd



  • Also erstmal danke für die Antworten. Ich benutze Windows mit MinGW-compiler.
    Ich habe am ende der QT-Fenster Funktion ein "return app.exec();" stehen, bringt aber nix das wegzulassen. Es ist eine ganz normale Konsolenanwendung, sowas wie das hier :

    #include <iostream>
    
    #include <QApplication>
    #include <QFont>
    #include <QPushButton>
    #include <QWidget>
    
    using namespace std;
    
    int ShowWindow(int argc, char *argv[])
    {
         QApplication app(argc, argv);
    
         QWidget window;
         window.resize(200, 120);
    
         QPushButton quit("Quit", &window);
         quit.setFont(QFont("Times", 18, QFont::Bold));
         quit.setGeometry(10, 40, 180, 40);
         QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));
    
         window.show();
         return app.exec();
    
    }
    
    int main(int argc, char *argv[])
    {
    int x=0;
    
    cout << "Hallo, ich bin eine Konsole" << endl;
    cout << "1.Fenster"<<endl;
    cout << "0.Programm beenden"<<endl;
    
    cin >> x;
    
    if(x==1)
    {
    ShowWindow(argc, argv);
    }
    
    }
    

    Das sollte doch normalerweise gehen oder ? Oder mach ich da irgendwo einen Fehler ?

    Ach ja, und das .pro File wird halt ganz normal von QT generiert



  • Ups, dann hab ich das falschrum verstanden ...

    Dacht er hat ne fertige konsolenanwendung, deren Output er irgendwie in nen QWidget bekommen will ...

    Wenn ichs nun richtig verstehe, will er nu aus ner consolen App nen Fenster oeffnen ?

    Ach ja, und das .pro File wird halt ganz normal von QT generiert

    Denk mal das das auch dein problem ist ...
    unter windows entscheidet die einsprungsfunktion, ob ne console aufgemacht wird oder ned ...
    Beim MS Compiler gibst das per schalter an den Compiler mit (Subsystem:Console vs Subsystem:windows)
    wie das beim gcc ist, keine ahnung ....
    Das wird aber dein qmake soweiso fuer dich machen und das makefile damit befuellen ...
    im qmake kann man das glaub ich auch steuern per QMAKE_LFLAGS_CONSOLE
    aber ich nutze qmake ned, deswegen kann ich ned recht weiterhelfen ...

    versuch mal:
    CONFIG += console
    in deiner .pro datei ...

    Ciao ...



  • Jaaaa niceeee, das geht, danke sehr


Log in to reply