2017-09-24 1 views
-1

Wie kann ich eine Datei in eine Fortschrittsanzeige schreiben?qt Verbindung der Datei lesen mit ProgressBar

ich diese Version versucht:

QFile wr(my_file); 
    connect(&wr, &QFile::pos , ui->bar, &QProgressBar::setValue); 

Und diese Version:

QFile wr(my_file); 
    Qbytearray my_data; 
    connect(&my_data, &Qbytearray::count , ui->bar, &QProgressBar::setValue); 

Diese 2-Versionen oben nicht funktioniert Der zweite gibt einen Fehler, dass Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast und die erste gibt - The slot requires more arguments than the signal provides. - Signal and slot arguments are not compatible.

Wie kann ich die Readi verknüpfen ng von der Datei zu einem Fortschrittsbalken, damit ich den hochgeladenen Dateifortschritt im Speicher sehen kann?

  • Ich weiß, dass die Funktionen, die ich verwendet habe, sind keine Signale, was ich frage ist, wie das entsprechende Signal zu erzeugen/die Alternative sollte ich ein geeignetes Signal an den Fortschrittsbalken

Antwort

2

verbinden Ich denke du kannst es versuchen:

class MyQFile : public QFile { 
    Q_OBJECT 
public: 
    MyQFile(const QString& filename) 
     : QFile(filename) 
     , bytesSum(0) 
    { 
    }  

signals: 
    void progress(int value); 

protected: 
    qint64 readData(char* data, qint64 maxlen) 
    {  
     qint64 bytesReaded = QFile::readData(data, maxlen); 
     bytesSum += bytesReaded; 

     emit progress((int)(bytesSum/size()) * 100); 
     return bytesReaded; 
    } 

    private: 
     qint64 bytesSum; 
};