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.1k 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.
  • N Offline
    N Offline
    NeueKlasse
    wrote on last edited by NeueKlasse
    #1

    Hallo Zusammen,

    ich moechte gerne innerhalb von QT eine .exe die als resource verfuegbar ist
    ausfuehren und damit eine Datei umwandeln, im Bild sollte es ganz gut beschrieben sein.
    Es geht kurzgesagt darum:

    • Über einen Button wird ein .bmp (bitmap) geladen und im QViewer angezeigt.

    • das .bmp ist unter 'Logo' als QFile vorhanden.

    • Gleichzeitig soll dieses File mithilfe der .exe Datei umgewandelt werden damit das .bin File mit dem Namen 'testimage.bin' daraus entsteht, dieses soll als
      QFile: logo_binary vorhanden sein.

    • ist dies via QProcess moeglich, wenn ja, wie?

    QTExe.jpg

    Danke und Gruss

    JonBJ 1 Reply Last reply
    0
    • N NeueKlasse

      Hallo Zusammen,

      ich moechte gerne innerhalb von QT eine .exe die als resource verfuegbar ist
      ausfuehren und damit eine Datei umwandeln, im Bild sollte es ganz gut beschrieben sein.
      Es geht kurzgesagt darum:

      • Über einen Button wird ein .bmp (bitmap) geladen und im QViewer angezeigt.

      • das .bmp ist unter 'Logo' als QFile vorhanden.

      • Gleichzeitig soll dieses File mithilfe der .exe Datei umgewandelt werden damit das .bin File mit dem Namen 'testimage.bin' daraus entsteht, dieses soll als
        QFile: logo_binary vorhanden sein.

      • ist dies via QProcess moeglich, wenn ja, wie?

      QTExe.jpg

      Danke und Gruss

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by JonB
      #2

      @NeueKlasse
      Sie muessen:

      1. Extrahieren Sie die Datei aus der Ressource in eine physische, externe Datei. (Vielleicht funktioniert Qfile::copy().)
      2. Rufen Sie QProcess auf, um diese Datei mit den entsprechenden Argumenten auszuführen.
      3. Löschen Sie die externe Datei, wenn QProcess fertig ist.
      N 1 Reply Last reply
      0
      • JonBJ JonB

        @NeueKlasse
        Sie muessen:

        1. Extrahieren Sie die Datei aus der Ressource in eine physische, externe Datei. (Vielleicht funktioniert Qfile::copy().)
        2. Rufen Sie QProcess auf, um diese Datei mit den entsprechenden Argumenten auszuführen.
        3. Löschen Sie die externe Datei, wenn QProcess fertig ist.
        N Offline
        N Offline
        NeueKlasse
        wrote on last edited by NeueKlasse
        #3

        @JonB Danke ersteinmal,

        • kann man mit Qfile::copy eine Resource Datei direkt kopieren ohne den Pfad
          ausserhalb zu nehmen?
          (Beispiel: QT Programm kann sich in verschiedenen Directories befinden und soll von da aus funktionieren)

        • ist es moeglich den Befehl

        bmp2c-escher3d.exe "testbmp.bmp"(Logo) testimage.bin -b -c

        der normalerweise ueber die Eingabeaufforderung aufgerufen wird so in QProcess uebernehmen?

        Screenshot 2023-08-10 124009.jpg

        Christian EhrlicherC 1 Reply Last reply
        0
        • N NeueKlasse

          @JonB Danke ersteinmal,

          • kann man mit Qfile::copy eine Resource Datei direkt kopieren ohne den Pfad
            ausserhalb zu nehmen?
            (Beispiel: QT Programm kann sich in verschiedenen Directories befinden und soll von da aus funktionieren)

          • ist es moeglich den Befehl

          bmp2c-escher3d.exe "testbmp.bmp"(Logo) testimage.bin -b -c

          der normalerweise ueber die Eingabeaufforderung aufgerufen wird so in QProcess uebernehmen?

          Screenshot 2023-08-10 124009.jpg

          Christian EhrlicherC Offline
          Christian EhrlicherC Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on last edited by
          #4

          @NeueKlasse Ja, beides ist möglich. Siehe QProcess Dokumentation.

          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
          0
          • Christian EhrlicherC Christian Ehrlicher

            @NeueKlasse Ja, beides ist möglich. Siehe QProcess Dokumentation.

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

            @Christian-Ehrlicher
            Danke, die Dokumentation koennte meiner Meinung nach mehr examples beinhalten...

            Habe jetzt mal ein wenig herumprobiert,
            das QFile Copy funktioniert nun einwandfrei,
            was mir Probleme macht ist nach wie vor das QProcess....
            und 2. das QFile nach dem Process zu loeschen.. ueber remove loescht er es mir nicht?

            Koenntest Du mir hier bitte weiterhelfen?

            Screenshot 2023-08-10 163837.jpg

            Wenn ich die Argumente weglasse dann bringt er folgende Zeile im Application Output:

            Screenshot 2023-08-10 164336.jpg

            das sieht soweit ganz gut aus und weisst auf fehlende Argumente hin, aber wie die zu schreiben sind?

            Christian EhrlicherC 1 Reply Last reply
            0
            • N NeueKlasse

              @Christian-Ehrlicher
              Danke, die Dokumentation koennte meiner Meinung nach mehr examples beinhalten...

              Habe jetzt mal ein wenig herumprobiert,
              das QFile Copy funktioniert nun einwandfrei,
              was mir Probleme macht ist nach wie vor das QProcess....
              und 2. das QFile nach dem Process zu loeschen.. ueber remove loescht er es mir nicht?

              Koenntest Du mir hier bitte weiterhelfen?

              Screenshot 2023-08-10 163837.jpg

              Wenn ich die Argumente weglasse dann bringt er folgende Zeile im Application Output:

              Screenshot 2023-08-10 164336.jpg

              das sieht soweit ganz gut aus und weisst auf fehlende Argumente hin, aber wie die zu schreiben sind?

              Christian EhrlicherC Offline
              Christian EhrlicherC Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on last edited by
              #6

              Naja "load_path" sieht für mich nicht wie eine bmp-Datei aus...

              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
              0
              • Christian EhrlicherC Christian Ehrlicher

                Naja "load_path" sieht für mich nicht wie eine bmp-Datei aus...

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

                  Naja "load_path" sieht für mich nicht wie eine bmp-Datei aus...

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

                  @Christian-Ehrlicher

                  Sorry, sollte so aussehen, die bitmap wird natuerlich vorher via QFileDialog eingelesen
                  und als logo_bitmap weiter verarbeitet.

                  Screenshot 2023-08-10 165726.jpg

                  Christian EhrlicherC 1 Reply Last reply
                  0
                  • N NeueKlasse

                    @Christian-Ehrlicher

                    Sorry, sollte so aussehen, die bitmap wird natuerlich vorher via QFileDialog eingelesen
                    und als logo_bitmap weiter verarbeitet.

                    Screenshot 2023-08-10 165726.jpg

                    Christian EhrlicherC Offline
                    Christian EhrlicherC Offline
                    Christian Ehrlicher
                    Lifetime Qt Champion
                    wrote on last edited by Christian Ehrlicher
                    #9

                    @NeueKlasse bitte poste Code und keine Bilder.

                    Mein letzter Kommentar ist immer noch gültig... '"logo_bitmap"' und 'logo_bitmap' ist nicht das selbe.

                    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
                    0
                    • Christian EhrlicherC Christian Ehrlicher

                      @NeueKlasse bitte poste Code und keine Bilder.

                      Mein letzter Kommentar ist immer noch gültig... '"logo_bitmap"' und 'logo_bitmap' ist nicht das selbe.

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

                      @Christian-Ehrlicher
                      sorry, hier der Code

                      void MainWindow::on_actionLoad_Logo_Bitmap_triggered()
                      {
                          QString filter = "Logo File (*.bmp)";
                          logo_bitmap = QFileDialog::getOpenFileName(this, "Select the Logo .bmp file", "PATH",filter);
                          logo_name = logo_bitmap.split("/")[3];
                          QFile Logo(logo_bitmap);
                      
                          if (!Logo.open(QFile::ReadOnly | QFile::Text))
                          {
                            QMessageBox::warning(this,"Error","Bitmap not opened");
                          }
                          else
                          {
                              ui->lineLogo->setText(logo_name);
                              ui->label->setText("Logo to be used, is Selected!");
                          }
                      
                          QPixmap p(logo_bitmap);
                          if (! ui->graphicsView->scene()) {
                              qDebug() << "No Scene!";
                      
                              QGraphicsScene *scene = new QGraphicsScene(this);
                              ui->graphicsView->setScene(scene);
                          }
                          ui->graphicsView->scene()->addPixmap(p);
                      
                          //Convert QFile Logo to .bin File (named: logo_binary (String)) Using: bmp2c-escher3d.exe testbmp.bmp testimage.bin -b -c
                      
                          QFile::copy(":/rec/Software/bmp2c-escher3d.exe", "PATH/LogoCompiler.exe");
                          QProcess::startDetached("PATH/LogoCompiler.exe" "Logo" "logo_binary" "-b" "-c");
                          //QProcess::waitForFinished(2000);
                          QFile Logo_Bin(logo_binary);
                          //QFile::remove("PATH/LogoCompiler.exe");
                      
                      }
                      
                      JonBJ 1 Reply Last reply
                      0
                      • N NeueKlasse

                        @Christian-Ehrlicher
                        sorry, hier der Code

                        void MainWindow::on_actionLoad_Logo_Bitmap_triggered()
                        {
                            QString filter = "Logo File (*.bmp)";
                            logo_bitmap = QFileDialog::getOpenFileName(this, "Select the Logo .bmp file", "PATH",filter);
                            logo_name = logo_bitmap.split("/")[3];
                            QFile Logo(logo_bitmap);
                        
                            if (!Logo.open(QFile::ReadOnly | QFile::Text))
                            {
                              QMessageBox::warning(this,"Error","Bitmap not opened");
                            }
                            else
                            {
                                ui->lineLogo->setText(logo_name);
                                ui->label->setText("Logo to be used, is Selected!");
                            }
                        
                            QPixmap p(logo_bitmap);
                            if (! ui->graphicsView->scene()) {
                                qDebug() << "No Scene!";
                        
                                QGraphicsScene *scene = new QGraphicsScene(this);
                                ui->graphicsView->setScene(scene);
                            }
                            ui->graphicsView->scene()->addPixmap(p);
                        
                            //Convert QFile Logo to .bin File (named: logo_binary (String)) Using: bmp2c-escher3d.exe testbmp.bmp testimage.bin -b -c
                        
                            QFile::copy(":/rec/Software/bmp2c-escher3d.exe", "PATH/LogoCompiler.exe");
                            QProcess::startDetached("PATH/LogoCompiler.exe" "Logo" "logo_binary" "-b" "-c");
                            //QProcess::waitForFinished(2000);
                            QFile Logo_Bin(logo_binary);
                            //QFile::remove("PATH/LogoCompiler.exe");
                        
                        }
                        
                        JonBJ Offline
                        JonBJ Offline
                        JonB
                        wrote on last edited by JonB
                        #11

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

                        if (!Logo.open(QFile::ReadOnly | QFile::Text))

                        Ein bitmap/.bmp Datei ist kein Text Datei! Aber macht nichts, da Sie es (Logo) nie benutzen :)

                        QProcess::startDetached("PATH/LogoCompiler.exe" "Logo" "logo_binary" "-b" "-c");

                        Argumenten -> { "Logo", "logo_binary", "-b", "-c" }

                        bool QProcess::startDetached(const QString &program, const QStringList &arguments = {}, const QString &workingDirectory = QString(), qint64 *pid = nullptr)

                        Wenn Sie startDetached() benutzen, dann werde Sie nie wissen, wann es fertig ist. Ist das für Sie ok?

                        N 1 Reply Last reply
                        0
                        • JonBJ JonB

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

                          if (!Logo.open(QFile::ReadOnly | QFile::Text))

                          Ein bitmap/.bmp Datei ist kein Text Datei! Aber macht nichts, da Sie es (Logo) nie benutzen :)

                          QProcess::startDetached("PATH/LogoCompiler.exe" "Logo" "logo_binary" "-b" "-c");

                          Argumenten -> { "Logo", "logo_binary", "-b", "-c" }

                          bool QProcess::startDetached(const QString &program, const QStringList &arguments = {}, const QString &workingDirectory = QString(), qint64 *pid = nullptr)

                          Wenn Sie startDetached() benutzen, dann werde Sie nie wissen, wann es fertig ist. Ist das für Sie ok?

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

                          @JonB

                          Sind die Argumente in meinem Fall richtig gewaehlt? es scheint zumindestens so nicht zu funktionieren...

                          es muss nicht unbedingt ueber startDetached() laufen, das war lediglich das erste mit was ich in berührung gekommen bin.

                          JonBJ 1 Reply Last reply
                          0
                          • N NeueKlasse

                            @JonB

                            Sind die Argumente in meinem Fall richtig gewaehlt? es scheint zumindestens so nicht zu funktionieren...

                            es muss nicht unbedingt ueber startDetached() laufen, das war lediglich das erste mit was ich in berührung gekommen bin.

                            JonBJ Offline
                            JonBJ Offline
                            JonB
                            wrote on last edited by
                            #13

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

                            Sind die Argumente in meinem Fall richtig gewaehlt?

                            Ich weiss nicht! Versuchen Sie es in einem Terminal.

                            QProcess proc;
                            proc.start("PATH/LogoCompiler.exe", { "Logo", "logo_binary", "-b", "-c" } );
                            qDebug() << proc.waitForFinished();
                            qDebug() << proc.readAllStandardOutput();
                            qDebug() << proc.readAllStandardError();
                            
                            Christian EhrlicherC 1 Reply Last reply
                            0
                            • JonBJ JonB

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

                              Sind die Argumente in meinem Fall richtig gewaehlt?

                              Ich weiss nicht! Versuchen Sie es in einem Terminal.

                              QProcess proc;
                              proc.start("PATH/LogoCompiler.exe", { "Logo", "logo_binary", "-b", "-c" } );
                              qDebug() << proc.waitForFinished();
                              qDebug() << proc.readAllStandardOutput();
                              qDebug() << proc.readAllStandardError();
                              
                              Christian EhrlicherC Offline
                              Christian EhrlicherC Offline
                              Christian Ehrlicher
                              Lifetime Qt Champion
                              wrote on last edited by Christian Ehrlicher
                              #14

                              Falls die Datei wirklich "Logo" heißt würde ich dennoch bezweifeln dass sie im aktuellen Verzeichnis liegt sondern irgendwo anders z. B. im source-Verzeichnis.

                              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
                              0
                              • Christian EhrlicherC Christian Ehrlicher

                                Falls die Datei wirklich "Logo" heißt würde ich dennoch bezweifeln dass sie im aktuellen Verzeichnis liegt sondern irgendwo anders z. B. im source-Verzeichnis.

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

                                @Christian-Ehrlicher

                                Danke JonB, durch den Debug kam nach einer kleinen Wartezeit:

                                false
                                "\r\ncan't open file 'Logo'\r\n\r\nError code -1\r\nDr\x81""cken Sie eine beliebige Taste . . . "
                                ""
                                QProcess: Destroyed while process ("PATH\LogoCompiler.exe") is still running.
                                

                                Ah, dann muss mir hier noch etwas fehlen, "Logo" soll die eingelesene .bmp "logo_bitmap" sein => QFile Logo(logo_bitmap),
                                diese soll dann im Process zur .bin Datei "logo_binary" werden.

                                Und ganz unten soll diese dann zu Logo_Bin werden. QFile Logo_Bin(logo_binary);
                                (das letztere sollte man sich normalerweise sparen können...)

                                QFile::remove() löscht mir ebenfalls im nachhinein nicht die kopierte Datei?

                                void MainWindow::on_actionLoad_Logo_Bitmap_triggered()
                                {
                                    QString filter = "Logo File (*.bmp)";
                                    logo_bitmap = QFileDialog::getOpenFileName(this, "Select the Logo .bmp file", "PATH",filter);
                                    logo_name = logo_bitmap.split("/")[3];
                                    QFile Logo(logo_bitmap);
                                
                                    if (!Logo.open(QFile::ReadOnly | QFile::Text))
                                    {
                                      QMessageBox::warning(this,"Error","Bitmap not opened");
                                    }
                                    else
                                    {
                                        ui->lineLogo->setText(logo_name);
                                        ui->label->setText("Logo to be used, is Selected!");
                                    }
                                
                                    QPixmap p(logo_bitmap);
                                    if (! ui->graphicsView->scene())
                                    {
                                        //qDebug() << "No Scene!";
                                        QGraphicsScene *scene = new QGraphicsScene(this);
                                        ui->graphicsView->setScene(scene);
                                    }
                                    ui->graphicsView->scene()->addPixmap(p);
                                
                                
                                    //Convert QFile Logo to .bin File (named: logo_binary (String)) Using: bmp2c-escher3d.exe testbmp.bmp testimage.bin -b -c
                                
                                    QFile::copy(":/rec/Software/bmp2c-escher3d.exe", "PATH/LogoCompiler.exe");
                                
                                    QProcess proc;
                                    proc.start("PATH/LogoCompiler.exe", { "Logo", "logo_binary", "-b", "-c" } );
                                    qDebug() << proc.waitForFinished();
                                    qDebug() << proc.readAllStandardOutput();
                                    qDebug() << proc.readAllStandardError();
                                
                                
                                    QFile Logo_Bin(logo_binary);
                                    
                                    //QFile::remove("PATH/LogoCompiler.exe");
                                

                                habe nun ebenfalls probiert ob ich die source bitmap vorher in den resource Ordner Kopiere..(und dann nach getaner arbeit wieder lösche) leider macht er mir das so nicht.
                                auch nicht unter Angabe des direkten Dateipfades, kann man So überhaupt in den resource Ordner kopieren?

                                    QString filter = "Logo File (*.bmp)";
                                    logo_bitmap = QFileDialog::getOpenFileName(this, "Select the Logo .bmp file", "PATH",filter);
                                
                                    QFile::copy(logo_bitmap, ":/rec/Images/SourceLogo.bmp");
                                
                                N S 2 Replies Last reply
                                0
                                • N NeueKlasse

                                  @Christian-Ehrlicher

                                  Danke JonB, durch den Debug kam nach einer kleinen Wartezeit:

                                  false
                                  "\r\ncan't open file 'Logo'\r\n\r\nError code -1\r\nDr\x81""cken Sie eine beliebige Taste . . . "
                                  ""
                                  QProcess: Destroyed while process ("PATH\LogoCompiler.exe") is still running.
                                  

                                  Ah, dann muss mir hier noch etwas fehlen, "Logo" soll die eingelesene .bmp "logo_bitmap" sein => QFile Logo(logo_bitmap),
                                  diese soll dann im Process zur .bin Datei "logo_binary" werden.

                                  Und ganz unten soll diese dann zu Logo_Bin werden. QFile Logo_Bin(logo_binary);
                                  (das letztere sollte man sich normalerweise sparen können...)

                                  QFile::remove() löscht mir ebenfalls im nachhinein nicht die kopierte Datei?

                                  void MainWindow::on_actionLoad_Logo_Bitmap_triggered()
                                  {
                                      QString filter = "Logo File (*.bmp)";
                                      logo_bitmap = QFileDialog::getOpenFileName(this, "Select the Logo .bmp file", "PATH",filter);
                                      logo_name = logo_bitmap.split("/")[3];
                                      QFile Logo(logo_bitmap);
                                  
                                      if (!Logo.open(QFile::ReadOnly | QFile::Text))
                                      {
                                        QMessageBox::warning(this,"Error","Bitmap not opened");
                                      }
                                      else
                                      {
                                          ui->lineLogo->setText(logo_name);
                                          ui->label->setText("Logo to be used, is Selected!");
                                      }
                                  
                                      QPixmap p(logo_bitmap);
                                      if (! ui->graphicsView->scene())
                                      {
                                          //qDebug() << "No Scene!";
                                          QGraphicsScene *scene = new QGraphicsScene(this);
                                          ui->graphicsView->setScene(scene);
                                      }
                                      ui->graphicsView->scene()->addPixmap(p);
                                  
                                  
                                      //Convert QFile Logo to .bin File (named: logo_binary (String)) Using: bmp2c-escher3d.exe testbmp.bmp testimage.bin -b -c
                                  
                                      QFile::copy(":/rec/Software/bmp2c-escher3d.exe", "PATH/LogoCompiler.exe");
                                  
                                      QProcess proc;
                                      proc.start("PATH/LogoCompiler.exe", { "Logo", "logo_binary", "-b", "-c" } );
                                      qDebug() << proc.waitForFinished();
                                      qDebug() << proc.readAllStandardOutput();
                                      qDebug() << proc.readAllStandardError();
                                  
                                  
                                      QFile Logo_Bin(logo_binary);
                                      
                                      //QFile::remove("PATH/LogoCompiler.exe");
                                  

                                  habe nun ebenfalls probiert ob ich die source bitmap vorher in den resource Ordner Kopiere..(und dann nach getaner arbeit wieder lösche) leider macht er mir das so nicht.
                                  auch nicht unter Angabe des direkten Dateipfades, kann man So überhaupt in den resource Ordner kopieren?

                                      QString filter = "Logo File (*.bmp)";
                                      logo_bitmap = QFileDialog::getOpenFileName(this, "Select the Logo .bmp file", "PATH",filter);
                                  
                                      QFile::copy(logo_bitmap, ":/rec/Images/SourceLogo.bmp");
                                  
                                  N Offline
                                  N Offline
                                  NeueKlasse
                                  wrote on last edited by NeueKlasse
                                  #16

                                  @NeueKlasse

                                  habs nun soweit geschafft... wenn ich die Directories alle manuell angebe,
                                  gibt es hier keine Moeglichkeit die benotigten und konvertierten Dateien innerhalb der Application abzulegen? um nicht an irgendwelche Pfade gebunden zu sein..

                                  ganz unten musste ich nocheinmal die logo_binary via QFileDialog oeffnen..
                                  QFile logo_binary("PATH"); hat hier nicht geklappt da logo_binary als string und nicht als File vorhanden sein muss...

                                  
                                      QFile::copy(":/rec/Software/bmp2c-escher3d.exe", "PATH/LogoCompiler.exe");
                                  
                                      QProcess proc;
                                      proc.start("PATH/LogoCompiler.exe", { "PATH/SourceLogo.bmp", "PATH/SourceLogo.bin", "-b", "-c" } );
                                      qDebug() << proc.waitForFinished();
                                      qDebug() << proc.readAllStandardOutput();
                                      qDebug() << proc.readAllStandardError();
                                      
                                      logo_binary = QFileDialog::getOpenFileName(this, "PATH/SourceLogo.bin");
                                  
                                  }
                                  
                                  J.HilkJ 1 Reply Last reply
                                  0
                                  • N NeueKlasse

                                    @NeueKlasse

                                    habs nun soweit geschafft... wenn ich die Directories alle manuell angebe,
                                    gibt es hier keine Moeglichkeit die benotigten und konvertierten Dateien innerhalb der Application abzulegen? um nicht an irgendwelche Pfade gebunden zu sein..

                                    ganz unten musste ich nocheinmal die logo_binary via QFileDialog oeffnen..
                                    QFile logo_binary("PATH"); hat hier nicht geklappt da logo_binary als string und nicht als File vorhanden sein muss...

                                    
                                        QFile::copy(":/rec/Software/bmp2c-escher3d.exe", "PATH/LogoCompiler.exe");
                                    
                                        QProcess proc;
                                        proc.start("PATH/LogoCompiler.exe", { "PATH/SourceLogo.bmp", "PATH/SourceLogo.bin", "-b", "-c" } );
                                        qDebug() << proc.waitForFinished();
                                        qDebug() << proc.readAllStandardOutput();
                                        qDebug() << proc.readAllStandardError();
                                        
                                        logo_binary = QFileDialog::getOpenFileName(this, "PATH/SourceLogo.bin");
                                    
                                    }
                                    
                                    J.HilkJ Offline
                                    J.HilkJ Offline
                                    J.Hilk
                                    Moderators
                                    wrote on last edited by
                                    #17

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

                                    gibt es hier keine Moeglichkeit die benotigten und konvertierten Dateien innerhalb der Application abzulegen

                                    nein, aber es gibt:
                                    https://doc.qt.io/qt-6/qstandardpaths.html

                                    für eine OS/PC und Platform unabhängige Pfad Erstellung


                                    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                                    Q: What's that?
                                    A: It's blue light.
                                    Q: What does it do?
                                    A: It turns blue.

                                    1 Reply Last reply
                                    2
                                    • N NeueKlasse

                                      @Christian-Ehrlicher

                                      Danke JonB, durch den Debug kam nach einer kleinen Wartezeit:

                                      false
                                      "\r\ncan't open file 'Logo'\r\n\r\nError code -1\r\nDr\x81""cken Sie eine beliebige Taste . . . "
                                      ""
                                      QProcess: Destroyed while process ("PATH\LogoCompiler.exe") is still running.
                                      

                                      Ah, dann muss mir hier noch etwas fehlen, "Logo" soll die eingelesene .bmp "logo_bitmap" sein => QFile Logo(logo_bitmap),
                                      diese soll dann im Process zur .bin Datei "logo_binary" werden.

                                      Und ganz unten soll diese dann zu Logo_Bin werden. QFile Logo_Bin(logo_binary);
                                      (das letztere sollte man sich normalerweise sparen können...)

                                      QFile::remove() löscht mir ebenfalls im nachhinein nicht die kopierte Datei?

                                      void MainWindow::on_actionLoad_Logo_Bitmap_triggered()
                                      {
                                          QString filter = "Logo File (*.bmp)";
                                          logo_bitmap = QFileDialog::getOpenFileName(this, "Select the Logo .bmp file", "PATH",filter);
                                          logo_name = logo_bitmap.split("/")[3];
                                          QFile Logo(logo_bitmap);
                                      
                                          if (!Logo.open(QFile::ReadOnly | QFile::Text))
                                          {
                                            QMessageBox::warning(this,"Error","Bitmap not opened");
                                          }
                                          else
                                          {
                                              ui->lineLogo->setText(logo_name);
                                              ui->label->setText("Logo to be used, is Selected!");
                                          }
                                      
                                          QPixmap p(logo_bitmap);
                                          if (! ui->graphicsView->scene())
                                          {
                                              //qDebug() << "No Scene!";
                                              QGraphicsScene *scene = new QGraphicsScene(this);
                                              ui->graphicsView->setScene(scene);
                                          }
                                          ui->graphicsView->scene()->addPixmap(p);
                                      
                                      
                                          //Convert QFile Logo to .bin File (named: logo_binary (String)) Using: bmp2c-escher3d.exe testbmp.bmp testimage.bin -b -c
                                      
                                          QFile::copy(":/rec/Software/bmp2c-escher3d.exe", "PATH/LogoCompiler.exe");
                                      
                                          QProcess proc;
                                          proc.start("PATH/LogoCompiler.exe", { "Logo", "logo_binary", "-b", "-c" } );
                                          qDebug() << proc.waitForFinished();
                                          qDebug() << proc.readAllStandardOutput();
                                          qDebug() << proc.readAllStandardError();
                                      
                                      
                                          QFile Logo_Bin(logo_binary);
                                          
                                          //QFile::remove("PATH/LogoCompiler.exe");
                                      

                                      habe nun ebenfalls probiert ob ich die source bitmap vorher in den resource Ordner Kopiere..(und dann nach getaner arbeit wieder lösche) leider macht er mir das so nicht.
                                      auch nicht unter Angabe des direkten Dateipfades, kann man So überhaupt in den resource Ordner kopieren?

                                          QString filter = "Logo File (*.bmp)";
                                          logo_bitmap = QFileDialog::getOpenFileName(this, "Select the Logo .bmp file", "PATH",filter);
                                      
                                          QFile::copy(logo_bitmap, ":/rec/Images/SourceLogo.bmp");
                                      
                                      S Offline
                                      S Offline
                                      SimonSchroeder
                                      wrote on last edited by
                                      #18

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

                                      QFile::remove() löscht mir ebenfalls im nachhinein nicht die kopierte Datei?

                                      In dem ursprünglichen Fall kann es (unter Windows) nicht funktionieren. Mit startDetached() kehrt der Funktionsaufruf direkt wieder zurück und die Datei kann nicht gelöscht werden, weil sie noch in Benutzung ist. Generell würde es sich daher anbieten das Signal QProcess::finished mit dem Löschen der Datei zu verbinden. Dann sollte hoffentlich die Datei auch wieder von Windows freigegeben worden sein. Sonst vielleicht zusätlich einen Timer von 1 Sekunde setzen, bevor die Datei gelöscht wird. (Andere Betriebssysteme erlauben das Löschen der Datei, während sie noch geöffnet ist. Die Datei ist dann sofort nicht mehr im Dateisystem sichtbar, wird physisch aber erst gelöscht, wenn sie nicht mehr geöffnet ist.)

                                      JonBJ N 2 Replies Last reply
                                      0
                                      • S SimonSchroeder

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

                                        QFile::remove() löscht mir ebenfalls im nachhinein nicht die kopierte Datei?

                                        In dem ursprünglichen Fall kann es (unter Windows) nicht funktionieren. Mit startDetached() kehrt der Funktionsaufruf direkt wieder zurück und die Datei kann nicht gelöscht werden, weil sie noch in Benutzung ist. Generell würde es sich daher anbieten das Signal QProcess::finished mit dem Löschen der Datei zu verbinden. Dann sollte hoffentlich die Datei auch wieder von Windows freigegeben worden sein. Sonst vielleicht zusätlich einen Timer von 1 Sekunde setzen, bevor die Datei gelöscht wird. (Andere Betriebssysteme erlauben das Löschen der Datei, während sie noch geöffnet ist. Die Datei ist dann sofort nicht mehr im Dateisystem sichtbar, wird physisch aber erst gelöscht, wenn sie nicht mehr geöffnet ist.)

                                        JonBJ Offline
                                        JonBJ Offline
                                        JonB
                                        wrote on last edited by JonB
                                        #19

                                        @SimonSchroeder
                                        Ich verstehe nicht. Jetzt hat er:

                                            proc.start("PATH/LogoCompiler.exe", { "PATH/SourceLogo.bmp", "PATH/SourceLogo.bin", "-b", "-c" } );
                                            qDebug() << proc.waitForFinished();
                                        

                                        Dass ist warum ich habe ihm diesen Code gegeben, einfach zu sein. Also kein startDetached(), und waitForFinished() vor dem Löschen? Aber mein Deutsch is nicht perfekt :)

                                        1 Reply Last reply
                                        0
                                        • S SimonSchroeder

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

                                          QFile::remove() löscht mir ebenfalls im nachhinein nicht die kopierte Datei?

                                          In dem ursprünglichen Fall kann es (unter Windows) nicht funktionieren. Mit startDetached() kehrt der Funktionsaufruf direkt wieder zurück und die Datei kann nicht gelöscht werden, weil sie noch in Benutzung ist. Generell würde es sich daher anbieten das Signal QProcess::finished mit dem Löschen der Datei zu verbinden. Dann sollte hoffentlich die Datei auch wieder von Windows freigegeben worden sein. Sonst vielleicht zusätlich einen Timer von 1 Sekunde setzen, bevor die Datei gelöscht wird. (Andere Betriebssysteme erlauben das Löschen der Datei, während sie noch geöffnet ist. Die Datei ist dann sofort nicht mehr im Dateisystem sichtbar, wird physisch aber erst gelöscht, wenn sie nicht mehr geöffnet ist.)

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

                                          @SimonSchroeder

                                          JonB hat hier recht, startDetached gibt es hier nicht mehr!
                                          nurnoch:

                                              QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/PanelDueLogoCompiler.exe");
                                              
                                                  QProcess proc;
                                              
                                                  proc.start(work_path+"/PanelDueLogoCompiler.exe", { "D:/Privat/Eigene Bilder/SourceLogo.bmp", work_path+"/SourceLogo.bin", "-b", "-c" } );
                                                  qDebug() << proc.waitForFinished();
                                                  qDebug() << proc.readAllStandardOutput();
                                                  qDebug() << proc.readAllStandardError();
                                              
                                              
                                                  logo_binary = QFileDialog::getOpenFileName(this, work_path+"/SourceLogo.bin");
                                          
                                          

                                          Habe wiegesagt unter QFile noch nichts gefunden das mir ein File direkt
                                          ohne Dialog laedt.
                                          das funktioniert nicht:

                                          QFile::open(this, work_path+"/SourceLogo.bin");
                                          
                                          JonBJ 1 Reply Last reply
                                          0

                                          • Login

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