Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Probleme mit QTextEdit und QMargin
QtWS25 Last Chance

Probleme mit QTextEdit und QMargin

Scheduled Pinned Locked Moved Unsolved German
qtexteditmarginpagesize
7 Posts 2 Posters 2.5k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ? Offline
    ? Offline
    A Former User
    wrote on last edited by
    #1

    Moin alle zusammen!
    Ich habe leider ein größeres Problem, aber ich denke, dass wir das hinbekommen.

    Zuerst einmal die Beschreibung:
    Ich entwickle gerade einen TextEditor mit QTextEdit. Und dieser soll QMargin, PageSize (A4,A5, etc.) und die Position von PageNumber (oben mittig, unten link, etc.) mit in einer .htm Datei speichern. In dieser .htm Datei wird auch der Content vom QTextEdit gespeichert. Soweit alles klar?
    PageSize, PageNumber werden in einer extra Datei namens "PagesTextEdit.cpp" definiert. Denn diese Datei speichert und lädt das Dokument. Nun habe ich 2 Funktionen eingebaut: SaveExtra(); und LoadExtra();

    SaveExtra:

    void PagesTextEdit::SaveExtra(QDataStream& out ) {
        QMarginsF t = m_pageMetrics.mmPageMargins();
        out << t;
        out << m_pageMetrics.mmPageSize().height();
        out << m_pageMetrics.mmPageSize().width();
    
    
    
    };
    

    In dieser Funktion wieder schon versucht, QMargin zu speichern, klappt auch super. Zusätzlich soll hier aber auch noch PageSize und PageNumber (Position) gespeichert werden.

    LoadExtra:

    void PagesTextEdit::LoadExtra(QDataStream& in ) {
        QMarginsF PageMargin;
    
        in >> PageMargin;
        setPageMargins(PageMargin);
    
        QMarginsF t;
        int pageheight;
        int pagewidth;
        in >> t;
        in >> pageheight;
        in >> pagewidth;
        m_pageMetrics.m_mmPageMargins = t;
        m_pageMetrics.m_mmPageSize = QSize(pagewidth, pageheight);
    
    };
    

    Hier wird QMargin geladen. Das Problem ist, dass zwar das Margin stimmt, aber kein Inhalt, wie Texte oder BIlder angezeigt werden. AUch hier soll zusätzlich noch PageSize und PageNumber (Position) gespeichert werden.

    Speicher-Funktion:

    void PagesTextEdit::saveUnderDocument() {
      if (fileName.isEmpty()) {
        fileName = QFileDialog::getSaveFileName(this, tr("Speichern unter..."),
                                                QString("Dokument.htm"), tr("TextPad 1.0 (*.htm);;"));
        QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
        if (fileName.isEmpty())
          return;
      }
    
      QFile file(fileName, this);
    
      if (!file.open(QIODevice::WriteOnly)) {
        qDebug() << "Fehler beim Speichern der Datei";
      }
    
      QProgressDialog progress("Speichern - Fortschritt", "Abbrechen", 0, 10);
      progress.setWindowTitle("Speichern");
      progress.setWindowIcon(QIcon(":/ic_save_black_24dp.png"));
      progress.show();
      for (int i = 0; i < 10; i++) {
        progress.setValue(i);
        if (progress.wasCanceled())
          break;
        QTime saveTime = QTime::currentTime().addMSecs(40);
        while (QTime::currentTime() < saveTime)
          QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
      }
      progress.setValue(1);
    
    
      QDataStream  out(&file);
      SaveExtra(out);
      out << encodeHtml(toHtml());
      file.close();
    }
    

    SaveExtra(out), deswegen SaveExtra...

    Öffnen-Funktion:

    void PagesTextEdit::loadDocument() {
      QString fileName = QFileDialog::getOpenFileName(this, tr("Öffnen..."),
                                                      QString(), tr("TextPad 1.0 (*.htm);;"));
    
      if (fileName.isEmpty())
        return;
    
      QFile file(fileName, this);
    
    
    
      if (!file.open(QIODevice::ReadOnly)) {
        qDebug() << "Fehler beim Öffnen der Datei";
        return;
      }
    
      QProgressDialog progress("Öffnen - Fortschritt", "Abbrechen", 0, 10);
      progress.setWindowTitle("Öffnen");
      progress.setWindowIcon(QIcon(":/ic_folder_open_black_24dp_1x.png"));
      progress.show();
      for (int i = 0; i < 10; i++) {
        progress.setValue(i);
        if (progress.wasCanceled())
          break;
        QTime saveTime = QTime::currentTime().addMSecs(40);
        while (QTime::currentTime() < saveTime)
          QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
      }
      progress.setValue(1);
    
    
      if (document()) {
        document()->clear();
      }
    
      QString html;
      QDataStream  in(&file);
      LoadExtra(in);
      in >> html;
      document()->setHtml(html); // file.readAll()
      file.close();
    }
    

    LoadExtra(in), deswegen LoadExtra...

    Hier ist der Link zu meinem Projekt, um ein Verständnis zu bekommen, was sich auf wen bezieht und wo deklariert ist. Das ganze hier spielt sich in der Datei "PagesTextEdit.cpp" ab.
    https://1drv.ms/f/s!AqaeHLtTIsoIhPkuv84DQOgVsHUISQ

    Ich bitte Euch, keinen Unfug mit dem Projekt zu machen :)

    Ich hoffe, diese Informationen helfen.

    LG

    1 Reply Last reply
    0
    • ? Offline
      ? Offline
      A Former User
      wrote on last edited by
      #2

      Kann denn keiner etwas dazu sagen?

      1 Reply Last reply
      0
      • Christian EhrlicherC Offline
        Christian EhrlicherC Offline
        Christian Ehrlicher
        Lifetime Qt Champion
        wrote on last edited by Christian Ehrlicher
        #3

        Ich würde einfach mal schauen was in 'html' drin steht. Außerdem benutzt du beim Speichern noch 'encodeHtml()' - was auch immer das mit dem html anstellt.
        Und was soll das ganze mit den 40ms Wartezeit?

        /edit: Und SaveExtra speichert 3 Werte, LoadExtra versucht hingegen 4 Werte zu laden...

        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
        Visit the Qt Academy at https://academy.qt.io/catalog

        1 Reply Last reply
        1
        • ? Offline
          ? Offline
          A Former User
          wrote on last edited by
          #4

          Okay, und wie schaue ich in html rein?

          1 Reply Last reply
          0
          • Christian EhrlicherC Offline
            Christian EhrlicherC Offline
            Christian Ehrlicher
            Lifetime Qt Champion
            wrote on last edited by
            #5

            Debugger, qDebug(), QMessageBox,, QPlaintTextEdit, Speichern in einer Datei und anschauen mit TextEditor.
            Und wie ich schon sagte - beim Schreiben benutzt Du encodeHtml() - was auch immer diese Funktion macht. Beim Einlesen übergibst Du diesen String direkt an QTextEdit...

            Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
            Visit the Qt Academy at https://academy.qt.io/catalog

            1 Reply Last reply
            1
            • ? Offline
              ? Offline
              A Former User
              wrote on last edited by
              #6
              QString encodeHtml(QString html) {
                html = html.replace("ä", "&auml;");
                html = html.replace("Ä", "&Auml;");
                html = html.replace("ö", "&ouml;");
                html = html.replace("Ö", "&Ouml;");
                html = html.replace("ü", "&uuml;");
                html = html.replace("Ü", "&Uuml;");
                html = html.replace("ß", "&szlig");
                return html;
              }
              

              Das ist encodeHtml

              1 Reply Last reply
              0
              • Christian EhrlicherC Offline
                Christian EhrlicherC Offline
                Christian Ehrlicher
                Lifetime Qt Champion
                wrote on last edited by
                #7

                QTextEdit::toHtml() gibt schon gültiges HTML zurück - nicht nötig da noch einmal was zu konvertieren (was eh nicht mehr vorhanden ist). ß wird übrigens falsch konvertiert...

                Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                Visit the Qt Academy at https://academy.qt.io/catalog

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved