Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Upload a file
Forum Updated to NodeBB v4.3 + New Features

Upload a file

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
8 Posts 2 Posters 712 Views 1 Watching
  • 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.
  • FortigaF Offline
    FortigaF Offline
    Fortiga
    wrote on last edited by
    #1

    Hi everyone

    interface.png

    I'm practicing on a simple text editor project

    I want to upload the file selected by the user.

    I can display the path of the file I don't know how to load it

    A little help please

    Juste pour aller de l'avant et apprendre des choses, lorsque vous voulez devenir une légende, cela ne se fait pas du jour au lendemain.

    dheerendraD FortigaF 2 Replies Last reply
    0
    • FortigaF Fortiga

      Hi everyone

      interface.png

      I'm practicing on a simple text editor project

      I want to upload the file selected by the user.

      I can display the path of the file I don't know how to load it

      A little help please

      dheerendraD Offline
      dheerendraD Offline
      dheerendra
      Qt Champions 2022
      wrote on last edited by
      #2

      @Fortiga
      Use QFileDialog to select the file when you click on the button.
      Read the name of the file
      Read the contents of file using QFile
      Copy the text using set text

      Dheerendra
      @Community Service
      Certified Qt Specialist
      http://www.pthinks.com

      FortigaF 2 Replies Last reply
      1
      • dheerendraD dheerendra

        @Fortiga
        Use QFileDialog to select the file when you click on the button.
        Read the name of the file
        Read the contents of file using QFile
        Copy the text using set text

        FortigaF Offline
        FortigaF Offline
        Fortiga
        wrote on last edited by
        #3

        @dheerendra
        in fact it is complicated

        Juste pour aller de l'avant et apprendre des choses, lorsque vous voulez devenir une légende, cela ne se fait pas du jour au lendemain.

        1 Reply Last reply
        0
        • FortigaF Fortiga

          Hi everyone

          interface.png

          I'm practicing on a simple text editor project

          I want to upload the file selected by the user.

          I can display the path of the file I don't know how to load it

          A little help please

          FortigaF Offline
          FortigaF Offline
          Fortiga
          wrote on last edited by Fortiga
          #4

          @Fortiga
          Here are the source codes

          Fichierr HomePage

          import QtQuick
          import QtCore
          import QtQuick.Controls
          import QtQuick.Layouts
          import QtQuick.Dialogs

          // MyComponant
          import BlackEditeur 1.0

          Page {

          id: root
          background: Rectangle
          {
              gradient: Gradient{
                  GradientStop{position:0; color:"#ffffff"}
                  GradientStop{position:1; color:"#c1bbf9"}
              }
          }
          Action{
              id: onOpenMenuAction
              onTriggered: myMenu.openMenu()
          }
          Action{
              id: newNoteAction
              onTriggered: onLauncerNewNote()
          }
          Action{
              id: openFileAction
              onTriggered: onOpenFile.open()
          }
          
          header: ToolBar{
              anchors.top: parent.top
              background: Rectangle
              {
                  implicitHeight: 38
                  color: "black"
              }
              RowLayout
              {
                  id: rowLayout
                  anchors.fill: parent
                  spacing: 6
              ToolButton {
                  icon.source:  "qrc:/Icon/24x24/menu"
                  icon.height: 24
                  icon.width: 24
                  Layout.alignment: Qt.AlignLeft
                  action: onOpenMenuAction
              }
              ToolSeparator{Layout.fillHeight: true}
              Label
                  {
                      id: nomeApp
                      text: "Note-Black"
                      color: "white"
                      font.bold: true
                      font.letterSpacing: 2
                      font.pixelSize: 24
                      horizontalAlignment: Qt.AlignHCenter
                      verticalAlignment: Qt.AlignVCenter
                  }
          
                  ToolButton
                  {
                      icon.source:  "qrc:/Icon/24x24/search"
                      icon.height: 24
                      icon.width: 24
                      Layout.alignment: Qt.AlignJustify
                  }
          
                  ToolButton
                  {
                     // action: onSortingAction
                     icon.source:  "qrc:/Icon/24x24/sorting"
                     icon.height: 24
                     icon.width: 24
                     Layout.alignment:  Qt.AlignRight
          
          
                  }
              }
          }
          MyMenu
          {
              id: myMenu
              anchors.left: parent.left
          }
          
          footer: ToolBar{
              id: footerPage
              anchors.bottom: parent.bottom
              background: Rectangle
              {
                  implicitHeight: 40
                  color: "black"
              }
              RowLayout
              {
                  id: rowLayout2
                  anchors.fill: parent
                  spacing: 6
                  ToolButton{
          
                      icon.source: "qrc:/Icon/24x24/file.png"
                      icon.width: 24
                      icon.height: 24
                      action: openFileAction
                  }
                  ToolButton
                  {
                      icon.source: "qrc:/Icon/24x24/camera.png"
                      icon.width: 24
                      icon.height: 24
                  }
                  ToolButton
                  {
                      icon.source: "qrc:/Icon/24x24/language.png"
                      icon.width: 24
                      icon.height: 24
                  }
                  ToolButton
                  {
                      icon.source: "qrc:/Icon/24x24/add.png"
                      icon.width: 24
                      icon.height: 24
                      action: newNoteAction
                      Layout.alignment: Qt.AlignRight
                  }
              }
          }
          
          // Pour les foction java script
          
          function onLauncerNewNote()
          {
              stack.push("qrc:/NewNote.qml")
          }
          function onLauncerNewNoteAndString(string)
          {
              console.log(string)
          }
          
          FileDialog
          {
              id: onOpenFile
              fileMode: FileDialog.OpenFile
              selectedNameFilter.index: 1
              nameFilters: ["Fichier texte (*.txt)", "Fichier Html (*.html *.htm)", "Fichier Source Cpp/C (*.cpp *.c *.cxx)", "Fichier header Cpp/C (*.h *.hpp *.hxx)", "Tous les fichier (*.*)"]
              currentFolder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
          }
          }
          

          Juste pour aller de l'avant et apprendre des choses, lorsque vous voulez devenir une légende, cela ne se fait pas du jour au lendemain.

          1 Reply Last reply
          0
          • dheerendraD dheerendra

            @Fortiga
            Use QFileDialog to select the file when you click on the button.
            Read the name of the file
            Read the contents of file using QFile
            Copy the text using set text

            FortigaF Offline
            FortigaF Offline
            Fortiga
            wrote on last edited by
            #5

            @dheerendra
            In fact I have a homepage file that contains the interface in question and a mymenu file for the menu another newe note for editor plus two toolbars and finally myeditor which contains editor import in C++

            This rib handling is the same as that of the Qt example / texteditor

            Juste pour aller de l'avant et apprendre des choses, lorsque vous voulez devenir une légende, cela ne se fait pas du jour au lendemain.

            dheerendraD 1 Reply Last reply
            0
            • FortigaF Fortiga

              @dheerendra
              In fact I have a homepage file that contains the interface in question and a mymenu file for the menu another newe note for editor plus two toolbars and finally myeditor which contains editor import in C++

              This rib handling is the same as that of the Qt example / texteditor

              dheerendraD Offline
              dheerendraD Offline
              dheerendra
              Qt Champions 2022
              wrote on last edited by
              #6

              Are you able to select the file from your UI ? Do you get the name of the file ?

              Dheerendra
              @Community Service
              Certified Qt Specialist
              http://www.pthinks.com

              FortigaF 1 Reply Last reply
              0
              • dheerendraD dheerendra

                Are you able to select the file from your UI ? Do you get the name of the file ?

                FortigaF Offline
                FortigaF Offline
                Fortiga
                wrote on last edited by
                #7

                @dheerendra
                Yes , and I can get the file name

                2.png

                My problem is that once I got the full path of the file I can not worker

                actually I use QML and C++

                file Editeur.h

                #ifndef EDITEUR_H
                #define EDITEUR_H

                //#include "include.h"
                #include <QObject>
                #include <QTextCursor>
                #include <QUrl>

                QT_BEGIN_NAMESPACE
                class QTextDocument;
                class QQuickTextDocument;
                QT_END_NAMESPACE
                class Editeur : public QObject
                {
                Q_OBJECT
                Q_PROPERTY(QQuickTextDocument *document READ document WRITE setDocument NOTIFY documentChanged)
                Q_PROPERTY(QString fileName READ fileName NOTIFY fileUrlChanged)
                Q_PROPERTY(QString fileType READ fileType NOTIFY fileUrlChanged)
                Q_PROPERTY(QUrl fileUrl READ fileUrl NOTIFY fileUrlChanged)

                //Q_PROPERTY(bool modified READ modified WRITE setModified NOTIFY modifiedChanged)
                

                public:
                explicit Editeur(QObject *parent = nullptr);
                QQuickTextDocument document() const;
                void setDocument(QQuickTextDocument
                document);

                QString fileName() const;
                QString fileType() const;
                QUrl fileUrl() const;
                
                bool modified() const;
                void setModified(bool m);
                

                public Q_SLOTS:
                void onLoad(const QUrl& FileUrl);

                Q_SIGNALS:
                void documentChanged();
                void textChanged();
                void fileUrlChanged();
                void loaded(const QString& file, int format);

                void modifiedChanged();
                

                private:
                // void reset();
                QTextDocument *textDocument() const;

                QQuickTextDocument *m_document;
                QUrl m_fileUrl;
                

                };

                #endif // EDITEUR_H

                file editeur.cpp
                #include "editeur.h"

                #include <QFile>
                #include <QFileInfo>
                #include <QFileSelector>
                #include <QMimeDatabase>
                #include <QQmlFile>
                #include <QQmlFileSelector>
                #include <QQuickTextDocument>
                #include <QTextCharFormat>
                #include <QStringDecoder>
                #include <QTextDocument>
                #include <QDebug>

                Editeur::Editeur(QObject *parent)
                : QObject(parent),
                m_document(nullptr)
                {

                }
                QQuickTextDocument Editeur::document() const
                {
                return m_document;
                }
                void Editeur::setDocument(QQuickTextDocument
                document)
                {
                if(document == m_document)
                return;

                if(m_document)
                    disconnect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &Editeur::modifiedChanged);
                m_document = document;
                if(m_document)
                    connect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &Editeur::modifiedChanged);
                emit documentChanged();
                

                }

                QString Editeur::fileName() const
                {
                const QString filePath = QQmlFile::urlToLocalFileOrQrc(m_fileUrl);
                const QString fileName = QFileInfo(filePath).fileName();
                if(fileName.isEmpty())
                return QStringLiteral("untitled.txt");
                return fileName;
                }
                QString Editeur::fileType() const
                {
                return QFileInfo(fileName()).suffix();
                }
                QUrl Editeur::fileUrl() const
                {
                return m_fileUrl;
                }
                void Editeur::onLoad(const QUrl& fileUrl)
                {
                if(fileUrl == m_fileUrl)
                return;

                QQmlEngine *engine = qmlEngine(this);
                if(!engine){
                    qWarning() << "onLoad() ERREUR";
                    return;
                }
                const QUrl path = QQmlFileSelector::get(engine)->selector()->select(fileUrl);
                const QString fileName = QQmlFile::urlToLocalFileOrQrc(path);
                if (QFile::exists(fileName)) {
                    QMimeType mime = QMimeDatabase().mimeTypeForFile(fileName);
                     QFile file(fileName);
                       if (file.open(QFile::ReadOnly)) {
                           QByteArray data = file.readAll();
                            if (QTextDocument *doc = textDocument()) {
                                doc->setBaseUrl(path.adjusted(QUrl::RemoveFilename));
                                doc->setModified(false);
                                if (mime.inherits("text/markdown")) {
                                                  emit loaded(QString::fromUtf8(data), Qt::MarkdownText);
                            }else {
                                    auto encoding = QStringConverter::encodingForHtml(data);
                                    if (encoding) {
                                        QStringDecoder decoder(*encoding);
                                        emit loaded(decoder(data), Qt::AutoText);
                                       } else {
                                        // fall back to utf8
                                        emit loaded(QString::fromUtf8(data), Qt::AutoText);
                                    }
                                }
                                    }
                              //reset();
                       }
                }
                m_fileUrl = fileUrl;
                 emit fileUrlChanged();
                

                }
                QTextDocument *Editeur::textDocument() const
                {
                if (!m_document)
                return nullptr;

                return m_document->textDocument();
                

                }
                bool Editeur::modified() const
                {
                return m_document && m_document->textDocument()->isModified();
                }

                void Editeur::setModified(bool m)
                {
                if (m_document)
                m_document->textDocument()->setModified(m);
                }

                #include "moc_editeur.cpp"

                file editeur.qml

                import QtQuick
                import QtQuick.Controls
                import BlackEditeur 1.0
                import QtQuick.Layouts

                Page
                {
                id: root

                property string sfilePath: qsTr("Ecrirez votre texte ici.....")
                

                Editeur
                {
                id: document
                document: textArea.textDocument
                }

                    Flickable
                    {
                        id: flickable
                        flickableDirection: Flickable.VerticalFlick
                        anchors.fill: parent
                        TextArea.flickable: TextArea
                        {
                            id: textArea
                            placeholderText: sfilePath
                            textFormat: Qt.RichText
                            wrapMode: TextArea.Wrap
                            font.pixelSize: 16
                            focus: true
                            selectByMouse: true
                            persistentSelection: true
                            leftPadding: 6
                            rightPadding: 6
                            topPadding: 12
                            bottomPadding: 0
                            background: Rectangle
                            {
                                gradient: Gradient{
                                    GradientStop{position:0; color:"#ffffff"}
                                    GradientStop{position:1; color:"#c1bbf9"}
                                }
                            }
                        }
                        ScrollBar.vertical: ScrollBar{}
                    }
                

                }

                Juste pour aller de l'avant et apprendre des choses, lorsque vous voulez devenir une légende, cela ne se fait pas du jour au lendemain.

                FortigaF 1 Reply Last reply
                0
                • FortigaF Fortiga

                  @dheerendra
                  Yes , and I can get the file name

                  2.png

                  My problem is that once I got the full path of the file I can not worker

                  actually I use QML and C++

                  file Editeur.h

                  #ifndef EDITEUR_H
                  #define EDITEUR_H

                  //#include "include.h"
                  #include <QObject>
                  #include <QTextCursor>
                  #include <QUrl>

                  QT_BEGIN_NAMESPACE
                  class QTextDocument;
                  class QQuickTextDocument;
                  QT_END_NAMESPACE
                  class Editeur : public QObject
                  {
                  Q_OBJECT
                  Q_PROPERTY(QQuickTextDocument *document READ document WRITE setDocument NOTIFY documentChanged)
                  Q_PROPERTY(QString fileName READ fileName NOTIFY fileUrlChanged)
                  Q_PROPERTY(QString fileType READ fileType NOTIFY fileUrlChanged)
                  Q_PROPERTY(QUrl fileUrl READ fileUrl NOTIFY fileUrlChanged)

                  //Q_PROPERTY(bool modified READ modified WRITE setModified NOTIFY modifiedChanged)
                  

                  public:
                  explicit Editeur(QObject *parent = nullptr);
                  QQuickTextDocument document() const;
                  void setDocument(QQuickTextDocument
                  document);

                  QString fileName() const;
                  QString fileType() const;
                  QUrl fileUrl() const;
                  
                  bool modified() const;
                  void setModified(bool m);
                  

                  public Q_SLOTS:
                  void onLoad(const QUrl& FileUrl);

                  Q_SIGNALS:
                  void documentChanged();
                  void textChanged();
                  void fileUrlChanged();
                  void loaded(const QString& file, int format);

                  void modifiedChanged();
                  

                  private:
                  // void reset();
                  QTextDocument *textDocument() const;

                  QQuickTextDocument *m_document;
                  QUrl m_fileUrl;
                  

                  };

                  #endif // EDITEUR_H

                  file editeur.cpp
                  #include "editeur.h"

                  #include <QFile>
                  #include <QFileInfo>
                  #include <QFileSelector>
                  #include <QMimeDatabase>
                  #include <QQmlFile>
                  #include <QQmlFileSelector>
                  #include <QQuickTextDocument>
                  #include <QTextCharFormat>
                  #include <QStringDecoder>
                  #include <QTextDocument>
                  #include <QDebug>

                  Editeur::Editeur(QObject *parent)
                  : QObject(parent),
                  m_document(nullptr)
                  {

                  }
                  QQuickTextDocument Editeur::document() const
                  {
                  return m_document;
                  }
                  void Editeur::setDocument(QQuickTextDocument
                  document)
                  {
                  if(document == m_document)
                  return;

                  if(m_document)
                      disconnect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &Editeur::modifiedChanged);
                  m_document = document;
                  if(m_document)
                      connect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &Editeur::modifiedChanged);
                  emit documentChanged();
                  

                  }

                  QString Editeur::fileName() const
                  {
                  const QString filePath = QQmlFile::urlToLocalFileOrQrc(m_fileUrl);
                  const QString fileName = QFileInfo(filePath).fileName();
                  if(fileName.isEmpty())
                  return QStringLiteral("untitled.txt");
                  return fileName;
                  }
                  QString Editeur::fileType() const
                  {
                  return QFileInfo(fileName()).suffix();
                  }
                  QUrl Editeur::fileUrl() const
                  {
                  return m_fileUrl;
                  }
                  void Editeur::onLoad(const QUrl& fileUrl)
                  {
                  if(fileUrl == m_fileUrl)
                  return;

                  QQmlEngine *engine = qmlEngine(this);
                  if(!engine){
                      qWarning() << "onLoad() ERREUR";
                      return;
                  }
                  const QUrl path = QQmlFileSelector::get(engine)->selector()->select(fileUrl);
                  const QString fileName = QQmlFile::urlToLocalFileOrQrc(path);
                  if (QFile::exists(fileName)) {
                      QMimeType mime = QMimeDatabase().mimeTypeForFile(fileName);
                       QFile file(fileName);
                         if (file.open(QFile::ReadOnly)) {
                             QByteArray data = file.readAll();
                              if (QTextDocument *doc = textDocument()) {
                                  doc->setBaseUrl(path.adjusted(QUrl::RemoveFilename));
                                  doc->setModified(false);
                                  if (mime.inherits("text/markdown")) {
                                                    emit loaded(QString::fromUtf8(data), Qt::MarkdownText);
                              }else {
                                      auto encoding = QStringConverter::encodingForHtml(data);
                                      if (encoding) {
                                          QStringDecoder decoder(*encoding);
                                          emit loaded(decoder(data), Qt::AutoText);
                                         } else {
                                          // fall back to utf8
                                          emit loaded(QString::fromUtf8(data), Qt::AutoText);
                                      }
                                  }
                                      }
                                //reset();
                         }
                  }
                  m_fileUrl = fileUrl;
                   emit fileUrlChanged();
                  

                  }
                  QTextDocument *Editeur::textDocument() const
                  {
                  if (!m_document)
                  return nullptr;

                  return m_document->textDocument();
                  

                  }
                  bool Editeur::modified() const
                  {
                  return m_document && m_document->textDocument()->isModified();
                  }

                  void Editeur::setModified(bool m)
                  {
                  if (m_document)
                  m_document->textDocument()->setModified(m);
                  }

                  #include "moc_editeur.cpp"

                  file editeur.qml

                  import QtQuick
                  import QtQuick.Controls
                  import BlackEditeur 1.0
                  import QtQuick.Layouts

                  Page
                  {
                  id: root

                  property string sfilePath: qsTr("Ecrirez votre texte ici.....")
                  

                  Editeur
                  {
                  id: document
                  document: textArea.textDocument
                  }

                      Flickable
                      {
                          id: flickable
                          flickableDirection: Flickable.VerticalFlick
                          anchors.fill: parent
                          TextArea.flickable: TextArea
                          {
                              id: textArea
                              placeholderText: sfilePath
                              textFormat: Qt.RichText
                              wrapMode: TextArea.Wrap
                              font.pixelSize: 16
                              focus: true
                              selectByMouse: true
                              persistentSelection: true
                              leftPadding: 6
                              rightPadding: 6
                              topPadding: 12
                              bottomPadding: 0
                              background: Rectangle
                              {
                                  gradient: Gradient{
                                      GradientStop{position:0; color:"#ffffff"}
                                      GradientStop{position:1; color:"#c1bbf9"}
                                  }
                              }
                          }
                          ScrollBar.vertical: ScrollBar{}
                      }
                  

                  }

                  FortigaF Offline
                  FortigaF Offline
                  Fortiga
                  wrote on last edited by
                  #8

                  @Fortiga
                  Help

                  Juste pour aller de l'avant et apprendre des choses, lorsque vous voulez devenir une légende, cela ne se fait pas du jour au lendemain.

                  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