QML pour le moment manque de commandes système de base, je recherche donc le modèle le plus simple pour écrire sur /tmp/text.txt
.
Nouveau fichier ou projet. Choisissez l'application QML avec le plugin C++. qmake est généralement plus facile à ramasser que cmake.
Choisissez un nom pour votre projet. Prochain.
Habituellement, vous pouvez simplement choisir le framework par défaut sélectionné. Prochain.
Ajoutez Bazaar Version Control, car cela fonctionne bien avec Launchpad. Vous pouvez aussi essayer Git si vous le connaissez bien. Launchpad prend en charge les deux, mais le support Git est encore assez nouveau à compter de juillet 2016.
Modifiez votre en-tête en ajoutant les trois lignes des commentaires.
Modifiez votre source en ajoutant simplement la fonction en bas.
Modifiez votre fichier Main.qml en ajoutant uniquement le composant situé en bas.
Exécutez votre application et recherchez le fichier texte dans votre répertoire de construction. Le répertoire de construction se trouve dans le même répertoire que votre répertoire de projet et le mot "build-" est préfixé au début.
Il n'y a aucun moyen d'écrire dans un fichier à partir de QML/Javascript, nous avons donc besoin d'un peu de C++ pour faire le travail.
Créez un nouveau projet Qt Quick 2 Application (Built-in Elements)
dans Qt Creator appelé FileIO avec les fichiers suivants:
Le fichier de projet: FileIO.pro
# The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp
# Please do not modify the following two lines. Required for deployment.
include(qtquick2applicationviewer/qtquick2applicationviewer.pri)
qtcAddDeployment()
HEADERS += fileio.h
Le fichier d'en-tête: fileio.h (inspiré par lecture et écriture de fichiers au format QML )
#ifndef FILEIO_H
#define FILEIO_H
#include <QObject>
#include <QFile>
#include <QTextStream>
class FileIO : public QObject
{
Q_OBJECT
public slots:
bool write(const QString& source, const QString& data)
{
if (source.isEmpty())
return false;
QFile file(source);
if (!file.open(QFile::WriteOnly | QFile::Truncate))
return false;
QTextStream out(&file);
out << data;
file.close();
return true;
}
public:
FileIO() {}
};
#endif // FILEIO_H
main.cpp :
#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include <QQmlContext>
#include "fileio.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
FileIO fileIO;
QtQuick2ApplicationViewer viewer;
viewer.rootContext()->setContextProperty("fileio", &fileIO);
viewer.setMainQmlFile(QStringLiteral("qml/FileIO/main.qml"));
viewer.showExpanded();
return app.exec();
}
Et enfin qml/FileIO/main.qml :
import QtQuick 2.0
Rectangle {
width: 360
height: 360
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
onClicked: {
fileio.write("/tmp/test", "Ask Ubuntu");
Qt.quit();
}
}
}
Pour construire l'application, ouvrez un terminal et allez dans le dossier du projet FileIO pour taper:
`qmake && make && ./FileIO`.
Il va lancer l'application. Si vous cliquez sur MainView, le fichier texte sera créé et l'application fermée.
Mise à jour :
Le code ci-dessus fonctionnera sans restrictions pour une application de bureau. En ce qui concerne les autorisations d’écriture pour Ubuntu Touch, vous devrez suivre les instructions relatives à Confinement pour les packages de clics:
L'application disposera de fichiers d'accès en lecture/écriture dans les répertoires de base XDG standard. Plus précisément:
XDG_CACHE_HOME/<APP_PKGNAME> XDG_CONFIG_HOME/<APP_PKGNAME> XDG_DATA_HOME/<APP_PKGNAME> XDG_RUNTIME_DIR/confined/<APP_PKGNAME>
où APP_PKGNAME est ce qui est utilisé dans le champ "nom" du manifeste de clic. Par exemple, si le manifeste de clic contient ceci:
$ cat ./manifest.json { "name": "com.ubuntu.developer.you.yourapp", ... }
alors l'application aura un accès en lecture/écriture à ces répertoires et à tous les fichiers ou sous-répertoires qu'ils contiennent:
XDG_CACHE_HOME/com.ubuntu.developer.you.yourapp XDG_CONFIG_HOME/com.ubuntu.developer.you.yourapp XDG_DATA_HOME/com.ubuntu.developer.you.yourapp XDG_RUNTIME_DIR/confined/com.ubuntu.developer.you.yourapp
Juste pour clarifier la politique de confinement, si vous voulez écrire un fichier sur Ubuntu Touch, dans votre fichier mytype.cpp, remplacez:
QString filename = "text.txt";
par:
QString filename = "/home/phablet/.local/share/your_app_name/text.txt";