QTextDocumentWriter - zapis do formatu OpenDocument [Qt]

0

Witam,
Korzystając z dokumentacji klas QTextDocument i QTextDocumentWriter udało mi się naklepać taki kod:

        QString fileName = QFileDialog::getSaveFileName(this, tr("Zapisz dokument..."), "", tr("OpenDocument (*.odt)"));
        const QTextDocument document(editor->toHtml()); // <- 'editor' to obiekt klasy QTextEdit
        QTextDocumentWriter writer(fileName);
        writer.setFormat("odf");

        if(writer.write(&document))
        {
            qDebug() << "Document " << fileName << " saved succesfully.";
        }
        else
        {
            QMessageBox error(this);
            error.setText("Błąd przy próbie zapisu pliku!");
            error.setIcon(QMessageBox::Critical);
            error.exec();
        }

mający przeprowadzić zapis tekstu formatowanego do pliku OpenDocument Text (*.odt). Niby wszystko działa dobrze, ale kiedy jednak próbuję go otworzyć już nie jest tak dobrze - kiedy robię to przy pomocy własnego programu, wczytują się krzaczki, a kiedy Microsoft Wordem - po prostu dostaję informację, że plik jest uszkodzony. Co muszę poprawić, żeby wszystko śmigało jak należy?

0

Skad ta pewność , że błąd leży w zapisie.Masz jakis wyprintowany log z błędami dot. zapisu "or something".

Btw. Dalej piszesz , że masz problem z otwarciem

ale kiedy jednak próbuję go otworzyć już nie jest tak dobrze

0

Podeslij mi ten plik pls.

0

OK. Jest w załączniku (wpakowane do archiwum *.rar, bo 4pro nie obsługuje formatu *.odt ;C)

0

Teraz możesz sam na debugu sprawdzić czy przesyła tekst do bufora.

0

Udało mi się ustalić, że coś się w tym pliku zapisało - taki kod:

        QString fileName = QFileDialog::getOpenFileName(this, tr("Otwórz dokument..."), "", tr("OpenDocument (*.odt)"));
        QFile file(fileName);
        file.open(QIODevice::ReadOnly);
        QTextDocument doc(this);
        doc.setHtml(file.readAll());
        qDebug() << "HTML VALUE: " << doc.toHtml();

po próbie otwarcia w moim programie pliku wrzuca do logu aplikacji to:
''HTML VALUE: "<!DOCTYPE HTML PUBLIC "-*W3C*DTD HTML 4.0*EN" "http:*www.w3.org/TR/REC-html40/strict.dtd">

<html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">

PK

</body></html>"'' Jak widać to co się zapisuje jako właściwy tekst to wartość `PK`. Nie wiem czemu tak się dzieje - przecież wpisywałem co innego. Za każdym razem, nie zależnie od tego, co wpiszę w edytorze, zawsze przesyła się to samo - `PK` + jeszcze jakieś dwa krzaczki (po doklepaniu odpowiedniej linijki ta wartość pojawia się w edytorze).
0

PK to magic dla pliku .odt a te "krzaczki" to struktura pliku. Ściągnij sobie normalny program do otwierania tego typu formatów.

Na przyszłość GOOGLUJ czego nie wiesz a nie piszesz wszystko jak leci. Chesz być programista a z narzędzi nie potrafisz korzystać.

1

Kod jest przekombinowany! Niepotrzebna konwersja do html-a! A to może prowadzić do utraty danych!

QString fileName = QFileDialog::getSaveFileName(this, tr("Zapisz dokument..."), "", tr("OpenDocument (*.odt)"));
QTextDocumentWriter writer(fileName);
writer.setFormat("odf");

QTextDocument *document = editor->document();
if(!writer.write(document)) {
    QMessageBox error(this);
    error.setText("Błąd przy próbie zapisu pliku!");
    error.setIcon(QMessageBox::Critical);
    error.exec();
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1