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.3k 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 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 Online
          JonBJ Online
          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
            • N NeueKlasse

              @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 Online
              JonBJ Online
              JonB
              wrote on last edited by JonB
              #21

              @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 1 Reply Last reply
              0
              • 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

                                          • Login

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