Anzeige:
Ergebnis 1 bis 7 von 7

Thema: QProgressBar in zusammenhang mit QProcess

  1. #1
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Bayern
    Beiträge
    70

    Question QProgressBar in zusammenhang mit QProcess

    hallo leute,

    ich habe da mal wieder ein schwerwiegendes Problemchen

    hier erstmal der code:
    cpp:
    Code:
    void DoxBoxFE_Wizard::slot_Search()
    {
      if ( this->rbtnEXE->isChecked() )
        {
          search_start = new QProcess( this );
          search.append( "find" );
          search.append( LEdit_ChooseGameDir->text() );
          search.append( "-name" );
          search.append( "*.exe" );
    
          search_start->setArguments( search );
          search_start->start();
    
          connect( search_start, SIGNAL( readyReadStdout() ), this, SLOT( slot_ReadSearch_Out() ) );
          search.clear();
        }
      else if ( this->rbtnBAT->isChecked() )
        {
          search_start = new QProcess( this );
          search.append( "find" );
          search.append( LEdit_ChooseGameDir->text() );
          search.append( "-name" );
          search.append( "*.bat" );
    
          search_start->setArguments( search );
          search_start->start();
    
          connect( search_start, SIGNAL( readyReadStdout() ), this, SLOT( slot_ReadSearch_Out() ) );
          search.clear();
        }
      else if ( this->rbtnCOM->isChecked() )
        {
          search_start = new QProcess( this );
          search.append( "find" );
          search.append( LEdit_ChooseGameDir->text() );
          search.append( "-name" );
          search.append( "*.com" );
    
          search_start->setArguments( search );
          search_start->start();
    
          connect( search_start, SIGNAL( readyReadStdout() ), this, SLOT( slot_ReadSearch_Out() ) );
          search.clear();
        }
      else if ( this->rbtnAll->isChecked() )
        {
          search_start = new QProcess( this );
          search.append( "find" );
          search.append( LEdit_ChooseGameDir->text() );
          search.append( "-name" );
          search.append( "*.*" );
    
          search_start->setArguments( search );
          search_start->start();
    
          connect( search_start, SIGNAL( readyReadStdout() ), this, SLOT( slot_ReadSearch_Out() ) );
          search.clear();
        }
      else
        {
          KMessageBox::information( this, "Please select one option for search!", "DBoxGE - Gamesearch Wizard" );
        }
    
    }
    
    void DoxBoxFE_Wizard::slot_ReadSearch_Out()
    {
      LBox_FoundGames->clear();
      QString searchGame;
    
      while( search_start->canReadLineStdout() )
        {
          searchGame = search_start->readLineStdout();
          kdDebug() << searchGame << endl;
        }
    
      // Add found games into a ListBox
      if ( searchGame.append( maniac2 ) )
        {
          LBox_FoundGames->insertItem("Maniac Mansion 2");
        }
    
      if ( searchGame.append( maniac ) )
        {
          LBox_FoundGames->insertItem("Maniac Mansion 1");
        }
    
      if ( searchGame.append( ij3 ) )
        {
          LBox_FoundGames->insertItem("Indianer Jones 3");
        }
    
      if ( searchGame.append( ij4 ) )
        {
          LBox_FoundGames->insertItem("Indianer Jones 4");
        }
    
      if ( searchGame.append( loom ) )
        {
          LBox_FoundGames->insertItem("Loom");
        }
    
      if ( searchGame.append( mi1 ) )
        {
          LBox_FoundGames->insertItem("Monkey Island 1");
        }
    
      if ( searchGame.append( mi2 ) )
        {
          LBox_FoundGames->insertItem("Monkey Island 2");
        }
    
      if ( searchGame.append( prince ) )
        {
          LBox_FoundGames->insertItem("Prince of Persia");
        }
    
      if ( searchGame.append( prince2 ) )
        {
          LBox_FoundGames->insertItem("Prince of Persia 2");
        }
    
      if ( searchGame.append( sam_max ) )
        {
          LBox_FoundGames->insertItem("SamnMax");
        }
    
      if ( searchGame.append( zak_mc_krk ) )
        {
          LBox_FoundGames->insertItem("Zak Mc Kraken");
        }
    }
    die ausgabe in der konsole:
    Code:
    DosBox Frontend: /home/alex/games/dos-games/POP-INST/desktopd.cfg
    DosBox Frontend: /home/alex/games/dos-games/POP-INST/cdungeon.dat
    DosBox Frontend: /home/alex/games/dos-games/prince2/install.exe
    DosBox Frontend: /home/alex/games/dos-games/prince2/setup.cfg
    DosBox Frontend: /home/alex/games/dos-games/prince2/setup.exe
    ....
    wenn der user nun auf search klickt soll die progressbar anfang zu zählen. aber wie mache ich das? ein bsp. währe sehr nett

    Gruss
    ChMaster|LFreak

  2. #2
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    Wenn ich das in meinem Halbschlafszustand richtig sehe(super ne, erster Schultag, komme zur ersten um zu erfahren, dass die ersten beiden Stunden ausfallen), willst du dem User anzeigen wie weit find fortgeschritten ist.
    Da du im Voraus nicht weißt, wieviele Files bei der Suche rauskommen und die Suchdauer pro Ergebnis nicht linear ist, dürfte das nicht möglich sein. Es sei denn, 'find' hätte irgendeinen Parameter, der den Fortschritt erraten lässt, aber von so einem weiß ich nichts.

    Gruß
    Michael

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    QProgressBar hat für diese Fälle noch die Möglichkeit, einen pendelnden Balken darzustellen, wenn man 0 als Maximumwert angibt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Bayern
    Beiträge
    70

    Question

    anda_skoa:
    -------------

    wie stelle ich das an?

    tuxipuxi:
    ----------

    gibt es eine andere möglichkeit zu suchen, anstatt find zu nehmen?

    Gruss
    ChMaster|LFreak

  5. #5
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    Sofern vorhanden, kann man mit 'locate' in einem Bruchteil der Zeit die 'find' benötigt suchen. Der Vorteil, dass alles in einer Datenbank indiziert wird, ist gleichzeitig auch der Nachteil von 'locate', da der User regelmässig 'updatedb' ausführen muss, um die Datenbank zu aktualisieren.

    Ich würde es so machen wie anda_skoa es vorgeschlagen hat, macht am meisten Sinn.

    Gruß
    Michael

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von ChMaster|LFreak
    anda_skoa:
    -------------

    wie stelle ich das an?
    Das ist nicht weiter schwer.
    An dem Punkt in deinem Code, wo du die Instanz des ProgressBar erzeugst, drückst du nach der öffnenden Klammer des Kontruktors einfach die Taste mit der Beschriftung "0" (meistens rechts neben der Taste mit der Beschriftung "9") und teilst so der neu erzeugten QProgressBar Instanz mit, das sein "totalSteps" den Wert 0 hat.

    gibt es eine andere möglichkeit zu suchen, anstatt find zu nehmen?
    QDir rekursiv entryList bzw. entryInfoList

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Bayern
    Beiträge
    70

    Wink versuch ...

    Zitat Zitat von anda_skoa
    Das ist nicht weiter schwer.
    An dem Punkt in deinem Code, wo du die Instanz des ProgressBar erzeugst, drückst du nach der öffnenden Klammer des Kontruktors einfach die Taste mit der Beschriftung "0" (meistens rechts neben der Taste mit der Beschriftung "9") und teilst so der neu erzeugten QProgressBar Instanz mit, das sein "totalSteps" den Wert 0 hat.

    QDir rekursiv entryList bzw. entryInfoList

    Ciao,
    _
    ich werde alle 2 varianten versuchen, danke für die antworten

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •