Anzeige:
Ergebnis 1 bis 13 von 13

Thema: doofes problem

  1. #1
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667

    doofes problem

    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:

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

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Re: doofes problem

    Original geschrieben von lane

    Code:
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    danke, aber so klappts auch net:

    Code:
    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?

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Vielleicht müssen die einzelen Argumente auch einzelne Strings sein.

    Code:
    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.
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    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?

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

    schonmal danke

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    addArgument( "-b"+bytenum );

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    Original geschrieben von anda_skoa
    addArgument( "-b"+bytenum );

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

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    split ist nicht Teil des Parameters.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #9
    Registrierter Benutzer
    Registriert seit
    14.09.2002
    Ort
    Bruchsal
    Beiträge
    164
    Code:
    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.

  10. #10
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    egal was ich mache... es funktioniert NIE....
    ein test mit process->addArgument( "-b1000000" ) war erfolgreich, aber dieser:

    Code:
    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?

  11. #11
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    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

  12. #12
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Außerdem wäre es vielleicht so besser

    Code:
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  13. #13
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    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

Lesezeichen

Berechtigungen

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