Upload a file
-
Hi everyone
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
@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 -
@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
in fact it is complicated -
Hi everyone
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
@Fortiga
Here are the source codesFichierr HomePage
import QtQuick
import QtCore
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Dialogs// MyComponant
import BlackEditeur 1.0Page {
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) } }
-
@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
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
-
@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
Are you able to select the file from your UI ? Do you get the name of the file ?
-
Are you able to select the file from your UI ? Do you get the name of the file ?
@dheerendra
Yes , and I can get the file nameMy 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.LayoutsPage
{
id: rootproperty 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{} }
}
-
@dheerendra
Yes , and I can get the file nameMy 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.LayoutsPage
{
id: rootproperty 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{} }
}