Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Innerhalb QT .exe mit Argumenten Ausfuehren
Forum Updated to NodeBB v4.3 + New Features

Innerhalb QT .exe mit Argumenten Ausfuehren

Scheduled Pinned Locked Moved Unsolved German
36 Posts 5 Posters 7.5k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • JonBJ JonB

    @NeueKlasse
    Das sollte funktionieren, wenn Sie es nach waitForFinished() ruefen. Aber Versuchen Sie Folgendes:

    proc.close();
    QFile::remove();
    

    Unter Windows kann es auch sein, dass ein Virenscanner stört. Möglicherweise müssen Sie eine Verzögerung verwenden (QTimer).

    QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");
    QFile::remove(work_path+"/File.txt");
    

    Funktioniert das? Funktioniert das mit .exe anstatt .txt?

    N Offline
    N Offline
    NeueKlasse
    wrote on last edited by
    #22

    @JonB

    proc.close(); zusaetzlich bringt keinen erfolg

    statt .bin, .txt ist ebenfalls ohne Aenderung...

    Virensoftware (Kaspersky) geschlossen, gleiches Problem!

    JonBJ 1 Reply Last reply
    0
    • N NeueKlasse

      @JonB

      proc.close(); zusaetzlich bringt keinen erfolg

      statt .bin, .txt ist ebenfalls ohne Aenderung...

      Virensoftware (Kaspersky) geschlossen, gleiches Problem!

      JonBJ Online
      JonBJ Online
      JonB
      wrote on last edited by JonB
      #23

      @NeueKlasse

      QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");
      QFile::remove(work_path+"/File.txt");
      

      Nur das (kein QProcess) funktioniert nicht? Wie wissen Sie das? Weil File.txt existiert immernoch, auch nachdem Sie Ihr Programm beendet haben?

      QFile::remove() gibt einen Wert zurück:

      qDebug() << QFile::remove(work_path+"/File.txt");
      
      N 1 Reply Last reply
      0
      • JonBJ JonB

        @NeueKlasse

        QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");
        QFile::remove(work_path+"/File.txt");
        

        Nur das (kein QProcess) funktioniert nicht? Wie wissen Sie das? Weil File.txt existiert immernoch, auch nachdem Sie Ihr Programm beendet haben?

        QFile::remove() gibt einen Wert zurück:

        qDebug() << QFile::remove(work_path+"/File.txt");
        
        N Offline
        N Offline
        NeueKlasse
        wrote on last edited by NeueKlasse
        #24

        @JonB
        so sieht es nun aus:

        Erster Schritt: beim/nach dem Laden des .bmp Pictures wird nachfolgendes ausgefuehrt:

            QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/Compiler.exe");
        
            QProcess proc;
            proc.start(work_path+"/Compiler.exe", { work_path+"/SourceLogo.bmp", work_path+"/SourceLogo.bin", "-b", "-c" } );
            qDebug() << proc.waitForFinished();
            qDebug() << proc.readAllStandardOutput();
            qDebug() << proc.readAllStandardError();
            proc.close();
        
        //This should be removed, the file should be loaded directly without Dialog.
        
            logo_binary = QFileDialog::getOpenFileName(this, work_path+"/SourceLogo.bin");
        

        Danach wird per Save Button die Neue Datei gespeichert, und nachfolgend das ausgefuehrt:

        QFile::remove(work_path+"/SourceLogo.bin");
        QFile::remove(work_path+"/SourceLogo.bmp");
        qDebug() << QFile::remove(work_path+"/Compiler.exe");
        
        JonBJ 1 Reply Last reply
        0
        • N NeueKlasse

          @JonB
          so sieht es nun aus:

          Erster Schritt: beim/nach dem Laden des .bmp Pictures wird nachfolgendes ausgefuehrt:

              QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/Compiler.exe");
          
              QProcess proc;
              proc.start(work_path+"/Compiler.exe", { work_path+"/SourceLogo.bmp", work_path+"/SourceLogo.bin", "-b", "-c" } );
              qDebug() << proc.waitForFinished();
              qDebug() << proc.readAllStandardOutput();
              qDebug() << proc.readAllStandardError();
              proc.close();
          
          //This should be removed, the file should be loaded directly without Dialog.
          
              logo_binary = QFileDialog::getOpenFileName(this, work_path+"/SourceLogo.bin");
          

          Danach wird per Save Button die Neue Datei gespeichert, und nachfolgend das ausgefuehrt:

          QFile::remove(work_path+"/SourceLogo.bin");
          QFile::remove(work_path+"/SourceLogo.bmp");
          qDebug() << QFile::remove(work_path+"/Compiler.exe");
          
          JonBJ Online
          JonBJ Online
          JonB
          wrote on last edited by JonB
          #25

          @NeueKlasse
          Das ist viel zu kompliziert und beantwortet meine Fragen nicht! Ich weiss nicht was funktioniert und was funkioniert nicht....

          QFile::remove(work_path+"/SourceLogo.bin");    // funktioniert ja oder nein?
          QFile::remove(work_path+"/SourceLogo.bmp");    // funktioniert ja oder nein?
          qDebug() << QFile::remove(work_path+"/Compiler.exe");    // muesst wissen was der `qDebug()` ausgibt?!
          

          Danach:

          QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");

          QFile::remove(work_path+"/File.txt");

          Nur das (kein QProcess) funktioniert nicht? Wie wissen Sie das? Weil File.txt existiert immernoch, auch nachdem Sie Ihr Programm beendet haben?

          N 1 Reply Last reply
          0
          • JonBJ JonB

            @NeueKlasse
            Das ist viel zu kompliziert und beantwortet meine Fragen nicht! Ich weiss nicht was funktioniert und was funkioniert nicht....

            QFile::remove(work_path+"/SourceLogo.bin");    // funktioniert ja oder nein?
            QFile::remove(work_path+"/SourceLogo.bmp");    // funktioniert ja oder nein?
            qDebug() << QFile::remove(work_path+"/Compiler.exe");    // muesst wissen was der `qDebug()` ausgibt?!
            

            Danach:

            QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");

            QFile::remove(work_path+"/File.txt");

            Nur das (kein QProcess) funktioniert nicht? Wie wissen Sie das? Weil File.txt existiert immernoch, auch nachdem Sie Ihr Programm beendet haben?

            N Offline
            N Offline
            NeueKlasse
            wrote on last edited by NeueKlasse
            #26

            @JonB

            QFile::remove(work_path+"/SourceLogo.bin"); // funktioniert!
            QFile::remove(work_path+"/SourceLogo.bmp"); // funktioniert!
            qDebug() << QFile::remove(work_path+"/Compiler.exe"); // qDebug gibt aus: false

            QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");
            
            QFile::remove(work_path+"/File.txt");
            
            Nur das (kein QProcess) funktioniert nicht? Wie wissen Sie das? Weil File.txt existiert immernoch, auch nachdem Sie Ihr Programm beendet haben?
            

            Ich sehe im Dateibrowser das die Dateien dementsprechend erzeugt und geloescht werden => QProcess arbeitet wie es soll, die hier stehende "File.txt" heisst bei mir: "Compiler.exe", und diese wird wiegesagt nicht gelöscht

            JonBJ 2 Replies Last reply
            0
            • N NeueKlasse

              @JonB

              QFile::remove(work_path+"/SourceLogo.bin"); // funktioniert!
              QFile::remove(work_path+"/SourceLogo.bmp"); // funktioniert!
              qDebug() << QFile::remove(work_path+"/Compiler.exe"); // qDebug gibt aus: false

              QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");
              
              QFile::remove(work_path+"/File.txt");
              
              Nur das (kein QProcess) funktioniert nicht? Wie wissen Sie das? Weil File.txt existiert immernoch, auch nachdem Sie Ihr Programm beendet haben?
              

              Ich sehe im Dateibrowser das die Dateien dementsprechend erzeugt und geloescht werden => QProcess arbeitet wie es soll, die hier stehende "File.txt" heisst bei mir: "Compiler.exe", und diese wird wiegesagt nicht gelöscht

              JonBJ Online
              JonBJ Online
              JonB
              wrote on last edited by JonB
              #27

              @NeueKlasse
              Denken Sie daran, dass mein Deutsch nicht so gut ist :)

              Ich weiss ihrer Datei ist .exe genannt. Aber das kann zu Problemen führen. Ich habe bewusst darum gebeten, das zu verwenden, genau was ich geschrieben habe:

              QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");
              QFile::remove(work_path+"/File.txt");
              

              .txt nicht .exe! (Und kein QProcess während wir das testen.) Bitte.

              1 Reply Last reply
              0
              • N NeueKlasse

                @JonB

                QFile::remove(work_path+"/SourceLogo.bin"); // funktioniert!
                QFile::remove(work_path+"/SourceLogo.bmp"); // funktioniert!
                qDebug() << QFile::remove(work_path+"/Compiler.exe"); // qDebug gibt aus: false

                QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");
                
                QFile::remove(work_path+"/File.txt");
                
                Nur das (kein QProcess) funktioniert nicht? Wie wissen Sie das? Weil File.txt existiert immernoch, auch nachdem Sie Ihr Programm beendet haben?
                

                Ich sehe im Dateibrowser das die Dateien dementsprechend erzeugt und geloescht werden => QProcess arbeitet wie es soll, die hier stehende "File.txt" heisst bei mir: "Compiler.exe", und diese wird wiegesagt nicht gelöscht

                JonBJ Online
                JonBJ Online
                JonB
                wrote on last edited by JonB
                #28

                @NeueKlasse
                Mir ist noch ein anderer Gedanke gekommen, ich kann vielleicht erraten, wo das Problem liegt... :)

                Qt "Resource" Datei (:/rec/...) ist "read-only". Mit QFile::copy() möglicherweise bleibt die kopierte Datei schreibgeschützt. Ich selbst verwende Linux, nicht Windows. Aber ich glaube, das mit Windows QFile::remove() kann ein "readonly" Datei nicht löschen.

                QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");
                QFile::setPermissions(work_path+"/File.txt", QFile::ReadOther | QFile::WriteOther);  // Dieses!
                QFile::remove(work_path+"/File.txt");
                

                ?

                N 1 Reply Last reply
                1
                • JonBJ JonB

                  @NeueKlasse
                  Mir ist noch ein anderer Gedanke gekommen, ich kann vielleicht erraten, wo das Problem liegt... :)

                  Qt "Resource" Datei (:/rec/...) ist "read-only". Mit QFile::copy() möglicherweise bleibt die kopierte Datei schreibgeschützt. Ich selbst verwende Linux, nicht Windows. Aber ich glaube, das mit Windows QFile::remove() kann ein "readonly" Datei nicht löschen.

                  QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");
                  QFile::setPermissions(work_path+"/File.txt", QFile::ReadOther | QFile::WriteOther);  // Dieses!
                  QFile::remove(work_path+"/File.txt");
                  

                  ?

                  N Offline
                  N Offline
                  NeueKlasse
                  wrote on last edited by
                  #29

                  @JonB

                  Das war die Loesung!, setPermissions.... (.txt file konnte zuvor ebenfalls nicht geloescht werden...)
                  Danke!

                  gibt es hier noch eine andere Moeglichkeit ein File zu laden?
                  ich moechte keinen Dialog mehr, aber dennoch das Datei format beibehalten (String)

                  //logo_binary (String) gets filled with the File/Name
                  logo_binary = QFileDialog::getOpenFileName(this, work_path+"/SourceLogo.bin");
                  
                  //this example creates a new QFile named logo_binary => not ok
                  QFile  logo_binary(work_path+"/SourceLogo.bin"); 
                  
                  
                  JonBJ 1 Reply Last reply
                  0
                  • N NeueKlasse

                    @JonB

                    Das war die Loesung!, setPermissions.... (.txt file konnte zuvor ebenfalls nicht geloescht werden...)
                    Danke!

                    gibt es hier noch eine andere Moeglichkeit ein File zu laden?
                    ich moechte keinen Dialog mehr, aber dennoch das Datei format beibehalten (String)

                    //logo_binary (String) gets filled with the File/Name
                    logo_binary = QFileDialog::getOpenFileName(this, work_path+"/SourceLogo.bin");
                    
                    //this example creates a new QFile named logo_binary => not ok
                    QFile  logo_binary(work_path+"/SourceLogo.bin"); 
                    
                    
                    JonBJ Online
                    JonBJ Online
                    JonB
                    wrote on last edited by JonB
                    #30

                    @NeueKlasse said in Innerhalb QT .exe mit Argumenten Ausfuehren:

                    setPermissions....

                    Ja, nur under Windows, unter Linux nicht notwendig.

                    ich moechte keinen Dialog mehr, aber dennoch das Datei format beibehalten (String)

                    QFileDialog::getOpenFileName() ist nur dann der Fall, wenn Sie den Benutzer nach einem Dateinamen fragen möchten.
                    Wenn Sie bereits wissen, welches Pathanem Sie verwenden möchten, verwenden Sie es einfach. Bereits haben Sie:

                    QFile logo_binary(work_path+"/SourceLogo.bin");

                    Das stimmt. Also verstehe ich nicht warum "not ok"? Wenn QFileDialog::getOpenFileName() gibt work_path+"/SourceLogo.bin" zurück dann ist das das selbe wie QFile logo_binary(work_path+"/SourceLogo.bin"); ohne getOpenFilename(). "das Datei format beibehalten" ist nicht relevant.

                    N 1 Reply Last reply
                    2
                    • JonBJ JonB

                      @NeueKlasse said in Innerhalb QT .exe mit Argumenten Ausfuehren:

                      setPermissions....

                      Ja, nur under Windows, unter Linux nicht notwendig.

                      ich moechte keinen Dialog mehr, aber dennoch das Datei format beibehalten (String)

                      QFileDialog::getOpenFileName() ist nur dann der Fall, wenn Sie den Benutzer nach einem Dateinamen fragen möchten.
                      Wenn Sie bereits wissen, welches Pathanem Sie verwenden möchten, verwenden Sie es einfach. Bereits haben Sie:

                      QFile logo_binary(work_path+"/SourceLogo.bin");

                      Das stimmt. Also verstehe ich nicht warum "not ok"? Wenn QFileDialog::getOpenFileName() gibt work_path+"/SourceLogo.bin" zurück dann ist das das selbe wie QFile logo_binary(work_path+"/SourceLogo.bin"); ohne getOpenFilename(). "das Datei format beibehalten" ist nicht relevant.

                      N Offline
                      N Offline
                      NeueKlasse
                      wrote on last edited by
                      #31

                      @JonB
                      ich muss hier leider einen Screenshot einfuegen damit man sieht was ich meine:

                      Screenshot 2023-08-11 173915.jpg

                      logo_binary ist in der ersten Zeile ein QString => Orange Farbe
                      und in der zweiten Zeile ein QFile => Dunkel Blaue Farbe

                      im moment ist es so das es NUR ueber den QFileDialog funktioniert, ansonsten:
                      QFSFileEngine::open: No file name specified

                      das File wird im QString Format hier weiterverwendet:

                       QFile *file = new QFile(logo_binary, NULL);
                          file->open(QIODevice::ReadOnly);
                      
                      Christian EhrlicherC 1 Reply Last reply
                      0
                      • N NeueKlasse

                        @JonB
                        ich muss hier leider einen Screenshot einfuegen damit man sieht was ich meine:

                        Screenshot 2023-08-11 173915.jpg

                        logo_binary ist in der ersten Zeile ein QString => Orange Farbe
                        und in der zweiten Zeile ein QFile => Dunkel Blaue Farbe

                        im moment ist es so das es NUR ueber den QFileDialog funktioniert, ansonsten:
                        QFSFileEngine::open: No file name specified

                        das File wird im QString Format hier weiterverwendet:

                         QFile *file = new QFile(logo_binary, NULL);
                            file->open(QIODevice::ReadOnly);
                        
                        Christian EhrlicherC Online
                        Christian EhrlicherC Online
                        Christian Ehrlicher
                        Lifetime Qt Champion
                        wrote on last edited by Christian Ehrlicher
                        #32

                        Ich verstehe das Problem nicht. Übergib dem QFile Konstruktor einfach den zusammengesetzten string so wie du ihn auch an QProcess übergibst. Wo ist da das Problem? Und QFile muss nicht auf den heap angelegt werden. Einfach auf den Stack und gut ists.

                        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                        Visit the Qt Academy at https://academy.qt.io/catalog

                        N 1 Reply Last reply
                        2
                        • Christian EhrlicherC Christian Ehrlicher

                          Ich verstehe das Problem nicht. Übergib dem QFile Konstruktor einfach den zusammengesetzten string so wie du ihn auch an QProcess übergibst. Wo ist da das Problem? Und QFile muss nicht auf den heap angelegt werden. Einfach auf den Stack und gut ists.

                          N Offline
                          N Offline
                          NeueKlasse
                          wrote on last edited by NeueKlasse
                          #33

                          @Christian-Ehrlicher

                          ich verstehe nicht ganz auf was du hinaus moechtest, wie bereits oben beschrieben erzeugt

                          QFile logo_binary("mein Pfad");
                          

                          eine QFile Variable.
                          ich brauche aber eine QString Variable, siehe

                          QString logo_binary
                          .
                          .
                          .
                          .
                          logo_binary = QFileDialog:getOpenFileName("mein Pfad");
                          
                          Christian EhrlicherC 1 Reply Last reply
                          0
                          • N NeueKlasse

                            @Christian-Ehrlicher

                            ich verstehe nicht ganz auf was du hinaus moechtest, wie bereits oben beschrieben erzeugt

                            QFile logo_binary("mein Pfad");
                            

                            eine QFile Variable.
                            ich brauche aber eine QString Variable, siehe

                            QString logo_binary
                            .
                            .
                            .
                            .
                            logo_binary = QFileDialog:getOpenFileName("mein Pfad");
                            
                            Christian EhrlicherC Online
                            Christian EhrlicherC Online
                            Christian Ehrlicher
                            Lifetime Qt Champion
                            wrote on last edited by
                            #34

                            QString logo_binary = "Mein Pfad" 🙄

                            Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                            Visit the Qt Academy at https://academy.qt.io/catalog

                            N 2 Replies Last reply
                            1
                            • Christian EhrlicherC Christian Ehrlicher

                              QString logo_binary = "Mein Pfad" 🙄

                              N Offline
                              N Offline
                              NeueKlasse
                              wrote on last edited by NeueKlasse
                              #35
                              This post is deleted!
                              1 Reply Last reply
                              0
                              • Christian EhrlicherC Christian Ehrlicher

                                QString logo_binary = "Mein Pfad" 🙄

                                N Offline
                                N Offline
                                NeueKlasse
                                wrote on last edited by NeueKlasse
                                #36

                                @Christian-Ehrlicher

                                Habe es auch so versucht ohne Aenderung,
                                hat allerdings gerade geklickt..

                                ich verarbeite das File (..den Pfad) danach folgendermassen weiter:

                                QFile *file = new QFile(logo_binary, NULL);
                                file->open(QIODevice::ReadOnly);
                                

                                Also mache ich doch gleich die Vereinfachung hier: (ohne zusaetzlichen Befehl)...

                                QFile *file = new QFile(work_path+"/SourceLogo.bin", NULL);
                                file->open(QIODevice::ReadOnly);
                                

                                und funktioniert. Aufjedenfall Danke!

                                1 Reply Last reply
                                1

                                • Login

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Categories
                                • Recent
                                • Tags
                                • Popular
                                • Users
                                • Groups
                                • Search
                                • Get Qt Extensions
                                • Unsolved