PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : doofes problem



tuxipuxi
02-12-2002, 17:52
hi,

habe gerad angefangen n kleines tool fuer das shellprogram "split" zu schreiben.
nur jetzt ist schon am anfang irgendein logischer - nicht syntaktischer fehler drin.
die datei wird einfach net gesplittet.

hier mal der code der klasse:



class split : public QVBox {

Q_OBJECT

public:

split( QWidget *parent=0, const char *name=0 ) {

filename = new QLabel( "File to Split..." , this );
fileinput = new QLineEdit( this );
filebutton = new QPushButton( "&Select Files", this );
filebutton->resize( 100,30 );

filesize = new QLabel( "Max file Size...(in mb)" , this );
sizeinput = new QLineEdit( this );

startbutton = new QPushButton( "Start splitting!", this );

connect( filebutton,SIGNAL( clicked() ), this, SLOT( getfilename()));
connect( startbutton,SIGNAL( clicked() ), this, SLOT( splitfiles()));

}

private:

QLabel *filename,*filesize;
QPushButton *filebutton,*startbutton;
QLineEdit *fileinput,*sizeinput;
QString filenamestring;

private slots:

void getfilename() {

filenamestring = QFileDialog::getOpenFileName( "/home", QString::null ,this, "Select a file to Split..", "File to Split" );
fileinput->setText ( filenamestring );

}

void splitfiles() {

float byte = filesize->text().toInt()*1024*1024;
QString bytenum = QString::number( byte );
QString command = "split -b" + bytenum + " " + filenamestring;
emit QProcess(writeToStdin( command ));
}



};


waere toll wenn ihr helfen koenntet :)

anda_skoa
02-12-2002, 18:07
Original geschrieben von lane



void splitfiles() {

float byte = filesize->text().toInt()*1024*1024;
QString bytenum = QString::number( byte );
QString command = "split -b" + bytenum + " " + filenamestring;
emit QProcess(writeToStdin( command ));
}



Da ist was faul.
QProcess mußt du am Heap erzeugen, weil sonst das Objekt sofort wieder zerstört wird.
Außerdem mußt du nur das kommando übergeben, das writeToStdin hat da nix zu suchen.
Ciao,
_

tuxipuxi
02-12-2002, 18:38
danke, aber so klappts auch net:



void splitfiles() {

float byte = filesize->text().toInt()*1024*1024;
QString bytenum = QString::number( byte );
QString command = "split -b" + bytenum;
QProcess *process = new QProcess ( this );
process->addArgument( command );
process->addArgument( filenamestring );
process->start();

}


kannst du mir den korrekten code sagen?

anda_skoa
02-12-2002, 18:59
Vielleicht müssen die einzelen Argumente auch einzelne Strings sein.



void splitfiles() {

float byte = filesize->text().toInt()*1024*1024;
QString bytenum = QString::number( byte );
QString command = "split -b" + bytenum;
QProcess *process = new QProcess ( "split", this );
process->addArgument( "-b" );
process->addArgument( bytenum );
process->addArgument( filenamestring );
process->start();
}


Und return Wert von start() checken.
Und connecte eine Slot auf das processExited() Signal, damit du weiß, wann er fertig ist.

Ciao,
_
Am besten du behälts den Pointer auf den Process irgendwo in der Klasse.

tuxipuxi
02-12-2002, 19:11
hehe das problem war/ist , dass die dateigroesse direkt am parameter -b ohne freizeichen anliegen muss.
ich weiss nur nicht wie ich das loesen soll?


QString command = "split -b" + bytenum; tuts ja nicht :confused:

schonmal danke

anda_skoa
02-12-2002, 19:16
addArgument( "-b"+bytenum );

Ciao,
_

tuxipuxi
02-12-2002, 19:18
Original geschrieben von anda_skoa
addArgument( "-b"+bytenum );

Ciao,
_
wo ist da der unterschied zu meiner loesung???
funktioniert auch nicht

anda_skoa
02-12-2002, 21:58
split ist nicht Teil des Parameters.

Ciao,
_

The Ripper
03-12-2002, 13:10
QProcess *process = new QProcess ( "split", this );
Wenn du neue Objekte auf dem Heap anlegst, musst du diese auch wieder mit delete löschen, sonst braucht dein Programm immer mehr Speicher.

tuxipuxi
03-12-2002, 14:03
egal was ich mache... es funktioniert NIE....
ein test mit process->addArgument( "-b1000000" ) war erfolgreich, aber dieser:



void splitfiles() {

float byte = filesize->text().toInt()*1024*1024;
QString bytenum = QString::number( byte );
QProcess *process = new QProcess ( QString("split"),this );
process->addArgument( "-b"+bytenum );
process->addArgument( filenamestring );
process->start();
connect( process,SIGNAL(processExited()), qApp,SLOT(quit()));
}


code funktioniert auch nicht... weiss einer ne komplett andere loesung?

axeljaeger
03-12-2002, 14:52
float byte = filesize->text().toInt()*1024*1024;

Ist Blödsinn, weil uns interessiert, was im Textfeld sizeinput steht, und nicht, was auf dem Label filesize steht

anda_skoa
03-12-2002, 15:04
Außerdem wäre es vielleicht so besser



bool ok;
int megabyte = sizeinput->text().toInt(&ok);
if (!ok) return;
String bytenum;
bytenum.sprintf("-b%dm", megabyte);
process->addArgument( bytenum );


Das sprintf erzeugt wie bei normalen C sprintf einen String nach dem Formatstring.
also hier -bZahlm
Du mußt nicht in Bytes umrechnen, weil split mit Suffix arbeiten kann.

Ciao,
_

tuxipuxi
03-12-2002, 15:29
vielen dank euch allen.
hauptfehler waren eben sizeinput nicht zu nehmen und float.
bei float kommt naemlich eine kommazahl raus, und damit kann split nicht umgehen.


nochmal vielen dank :).
wird aber bestimmt nicht das letzte problem bei diesem programm sein, also freut euch nicht zu frueh ;) :D :)