[C++ | Qt] QDir und QFile arbeiten nicht richtig (OSX Lion)

code bug

code bug

Mitglied
Thread Starter
Dabei seit
27.04.2011
Beiträge
78
Reaktionspunkte
1
Moin moin.
Ich habe heute mit Qt angefangen und mir erstmal das Basis-Konzept verinnerlicht. (vid. Tutorials von thenewboston. sehr guter channel! und entgegend vieler leute meinung kann man durchaus von YouTube lernen!)

Wie auch immer. Ich habe ein simples Programm geschrieben welches aus einem großen Textfeld (QPlainTextField) lesen und in einen stream in eine datei (default.txt) im ordner home schreiben soll. aber ich findde die datei nicht... im bundle findet man sie im Ordner MacOS aber auch nur manchmal??

Gibt es dafür eventuell eine Lösung oder mache ich was falsch??
Thx schonmal
CB

P.S: Dercode:
Code:
#include "weird.h"
#include "ui_weird.h"
#include <QtCore/QTextStream>
#include <QtCore/QFile>
#include <QtCore/QDir>
weird::weird(QWidget *parent) : QMainWindow(parent), ui(new Ui::weird)
{
    ui->setupUi(this);
}


weird::~weird()
{
    delete ui;
}



void weird::on_pushButton_clicked()
{
    QDir::home();
    QFile outputfile("/default.txt");
    // QString holder = ui->plainTextEdit;
    QTextStream file(&outputfile);

    outputfile.open(QIODevice::WriteOnly);
    file << ui->plainTextEdit;  // file << holder;
    outputfile.flush();
    outputfile.close();
    
}

P.P.S: Hier ist übrigens das, was ich bekomme wenn ich im Creator (Prog gestartet) upsi 2 eingebe. Ich gehe ins Programmbundle (Prog.app/Contents/MacOS/default.txt) und bekomme das: 0x1015bfa40 (hex.)
 
Ist doch offensichtlich, oder?

Was soll das

Code:
QDir::home();

bewirken? Es gibt dir den absoluten Path deines Home Direcotrys als QDir wieder, aber ins nichts.
Du schreibst als einfach in eine File default.txt.

Fürs QFile brauchst du eh einen String, wenn ich mir dein Statement danach anschaue. In etwa so:

Code:
QString path = QDir::homePath() + "/default.txt";

Schau dir auch mal die (Online) Dokumentation von Qt an. Meiner Meinung nach einer der besten, die ich je gesehen habe:
http://qt-project.org/doc/qt-5.0/qdir.html#homePath

War das deine Frage, oder wolltest du wissen, was die HexZahl zu bedeuten hat?
 
  • Gefällt mir
Reaktionen: code bug
Thanks. Ich probiere deinen Vorschlag einmal. Hab mal in die Dokumentation reingeguckt, scheint ja genau das zu sein was du sagtest :)
 
Hey. Danke. Funktioniert, allerdings liegt der Text immer noch im Hex Format vor... Liegt das eventuell an QPlainTextEdit? Ich wollte den Text eig. in einem String zwischenspeichern, aber das hat von den Typen her nicht hingehauen... Ich könnte danach nochmal googlen.

Kann man das mit dem Hex Format irgendwie ändern? :(
Thx
CB
 
  • Gefällt mir
Reaktionen: code bug
Ja, probiers mal mit einem:

Code:
file << ui->plainTextEdit->toPlainText();  // file << holder;

http://qt-project.org/doc/qt-5.0/qplaintextedit.html#plainText-prop


Mach Dir nichts raus. Der Ansatz war ja richtig, am Anfang fehlt halt einfach der Umgang und so. Wird mit der Zeit alles kommen..
Jep funktioniert!! Danke!

Mach Dir nichts raus. Der Ansatz war ja richtig, am Anfang fehlt halt einfach der Umgang und so. Wird mit der Zeit alles kommen..
Stimmt... Aber zum Glück kann ich einigermaßen C++!
Gibt es in C++ Qt eigentlich auch Typecasting?...
CB
 
UPDATED CODE:
Code:
#include "weird.h"
#include "ui_weird.h"
#include <QtCore/QTextStream>
#include <QtCore/QFile>
#include <QtCore/QDir>
#include <QtGui/QApplication>
#include <QMessageBox>
#include <QFileDialog>
#include <QTextEdit>

QString name = "/default.txt";
QString path = QDir::homePath() + name;
QString dir;
// QMessageBox saved;


weird::weird(QWidget *parent) : QMainWindow(parent), ui(new Ui::weird)
{
    ui->setupUi(this);
}


weird::~weird()
{
    delete ui;
}



void weird::on_pushButton_clicked()
{
    QFile outputfile(path);
    QTextStream file(&outputfile);


    outputfile.open(QIODevice::WriteOnly | QIODevice::Text);
    file << ui->textEdit->toPlainText();
    outputfile.flush();
    outputfile.close();
    /*
    saved.setText("You Document should be saved as " + name + " into your home directory");
    saved.exec();
    */

}

void weird::on_savePath_clicked()
{

    dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),"/home", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
    name = "/" + ui->lineEdit->text();
    path = dir + "/" + name;

}


void weird::on_checkBox_toggled(bool checked)
{
    if (checked==true) {
        ui->textEdit->setFontWeight(75);
    } else {
        ui->textEdit->setFontWeight(25);
    }
}

void weird::on_checkBox_2_toggled(bool checked)
{
    if (checked==true) {
        ui->textEdit->setFontItalic(true);
    } else {
        ui->textEdit->setFontItalic(false);
    }
}

void weird::on_checkBox_3_toggled(bool checked)
{
    if (checked==true) {
        ui->textEdit->setFontUnderline(true);
    } else {
        ui->textEdit->setFontUnderline(false);
    }
}

Außerdem werd ich jetzt versuchen einen kleinen Texteditor draus zu machen, welchen ich dann frei mit Source zur Verfügung stelle :)
 
Zuletzt bearbeitet:
Zurück
Oben Unten