PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QProgressBar in zusammenhang mit QProcess



ChMaster|LFreak
06-01-2005, 04:20
hallo leute,

ich habe da mal wieder ein schwerwiegendes Problemchen :rolleyes:

hier erstmal der code:
cpp:


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:


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 :D

Gruss
ChMaster|LFreak

tuxipuxi
06-01-2005, 07:19
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

anda_skoa
06-01-2005, 18:41
QProgressBar hat für diese Fälle noch die Möglichkeit, einen pendelnden Balken darzustellen, wenn man 0 als Maximumwert angibt.

Ciao,
_

ChMaster|LFreak
06-01-2005, 22:36
anda_skoa:
-------------

wie stelle ich das an?

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

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

Gruss
ChMaster|LFreak

tuxipuxi
07-01-2005, 12:35
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

anda_skoa
07-01-2005, 14:56
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,
_

ChMaster|LFreak
07-01-2005, 19:50
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 :D