Ist es möglich, ein QFile wie ein std :: iostream zu verwenden? Ich bin mir ziemlich sicher, dass da draußen ein Wrapper sein muss. Die Frage ist wo?
Ich habe eine andere Bibliothek, die einen std :: isorem als Eingabeparameter benötigt, aber in meinem Programm habe ich nur eine QFile an diesem Punkt.
Ich habe meine eigene Lösung gefunden (die dieselbe Idee verwendet, die Stephen Chu vorgeschlagen hat)
%Vor%Ausgabe:
%Vor%Dieser Code verwendet den Konstruktor std :: ifstream move (C ++ - Funktion x0), der im Abschnitt 27.9.1.7 basic_ifstream-Konstruktoren von Arbeitsentwurf, Standard für Programmiersprache C ++ :
basic_ifstream(basic_ifstream&& rhs);
Effekte: Verschiebe Konstrukte aus dem rvalue rechts Dies wird erreicht durch Bewegen Sie den Aufbau der Basisklasse und das enthaltene basic_filebuf. Nächster basic_istream :: set_rdbuf (& amp; sb) wird aufgerufen, um das Enthaltene zu installieren basic_filebuf.
Siehe Zurückgeben eines Stream (C ++ 0x) zur Diskussion zu diesem Thema.
Ich habe mit dem folgenden Code eine eigene Lösung gefunden:
%Vor%Ich kann problemlos lokale Dateien lesen. Ich habe es nicht zum Schreiben von Dateien getestet. Dieser Code ist sicherlich nicht perfekt, aber es funktioniert.
Wenn das QFile-Objekt, das Sie erhalten, nicht bereits zum Lesen geöffnet ist, können Sie einen Dateinamen daraus abrufen und ein ifstream-Objekt öffnen.
Wenn es bereits geöffnet ist, können Sie Dateihandle / Deskriptor mit handle()
abrufen und von dort gehen Dort. Es gibt keine portable Möglichkeit, einen Stream vom Plattformgriff zu bekommen. Sie müssen einen Workaround für Ihre Plattformen finden.
Wenn Ihnen die Leistung nicht so wichtig ist, können Sie immer alles aus der Datei lesen und in ein std::stringstream
speichern und dann an Ihre Bibliothek übergeben. (Oder umgekehrt, alles in einen Stringstream puffern und dann in eine QFile schreiben)
Abgesehen davon sieht es nicht so aus, als könnten die beiden zusammenarbeiten. In jedem Fall sind Interaktionen von Qt zu STL oft ein Grund für obskure Fehler und subtile Inkonsistenzen, wenn die Version von STL, mit der Qt kompiliert wurde, in irgendeiner Weise von der Version von STL abweicht, die Sie verwenden. Dies kann zum Beispiel passieren, wenn Sie die Version von Visual Studio ändern.