QML fehlen derzeit grundlegende Systembefehle, daher suche ich nach der einfachsten Vorlage, die ich in /tmp/text.txt
schreiben kann.
Neue Datei oder neues Projekt. Wählen Sie die QML-App mit dem C++ Plugin. qmake ist in der Regel leichter zu holen als cmake.
Wählen Sie einen Namen für Ihr Projekt. Nächster.
Normalerweise können Sie einfach das ausgewählte Standardframework auswählen. Nächster.
Fügen Sie Bazaar Version Control hinzu, da es gut mit Launchpad zusammenarbeitet. Sie können Git auch ausprobieren, wenn Sie damit vertraut sind. Launchpad unterstützt beide, aber Git-Unterstützung ist seit Juli 2016 noch ziemlich neu.
Bearbeiten Sie Ihre Überschrift, indem Sie die drei Zeilen aus den Kommentaren hinzufügen.
Bearbeiten Sie Ihre Quelle, indem Sie nur die Funktion unten hinzufügen.
Bearbeiten Sie Ihre Main.qml-Datei, indem Sie nur die Komponente unten hinzufügen.
Führen Sie Ihre Anwendung aus, und suchen Sie die Textdatei in Ihrem Erstellungsverzeichnis. Das Erstellungsverzeichnis befindet sich im selben Verzeichnis wie Ihr Projektverzeichnis, und dem Wort "build-" wird am Anfang das Präfix vorangestellt.
Es gibt keine Möglichkeit, von QML/Javascript aus in eine Datei zu schreiben, daher brauchen wir ein bisschen C++, um die Arbeit zu erledigen.
Erstellen Sie in Qt Creator ein neues Qt Quick 2 Application (Built-in Elements)
-Projekt mit dem Namen FileIO und den folgenden Dateien:
Die Projektdatei: 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
Die Header-Datei: fileio.h (inspiriert von Lesen und Schreiben von Dateien in 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();
}
Und zum Schluss 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();
}
}
}
Öffnen Sie zum Erstellen der Anwendung ein Terminal, und wechseln Sie in den FileIO-Projektordner, und geben Sie Folgendes ein:
`qmake && make && ./FileIO`.
Die Anwendung wird gestartet. Wenn Sie auf die Hauptansicht klicken, wird die Textdatei erstellt und die Anwendung geschlossen.
Update :
Der obige Code funktioniert ohne Einschränkungen für eine Desktop-Anwendung. In Bezug auf Schreibberechtigungen für Ubuntu Touch müssen Sie die Richtlinien zu Beschränkung für Klick-Pakete befolgen:
Die Anwendung verfügt über Lese-/Schreibzugriffsdateien in den Standard-XDG-Basisverzeichnissen. Speziell:
XDG_CACHE_HOME/<APP_PKGNAME> XDG_CONFIG_HOME/<APP_PKGNAME> XDG_DATA_HOME/<APP_PKGNAME> XDG_RUNTIME_DIR/confined/<APP_PKGNAME>
dabei ist APP_PKGNAME das, was im Feld "Name" des Klickmanifests verwendet wird. ZB wenn das Klickmanifest folgendes hat:
$ cat ./manifest.json { "name": "com.ubuntu.developer.you.yourapp", ... }
dann hat die App Lese-/Schreibzugriff auf diese Verzeichnisse und alle Dateien oder Unterverzeichnisse darunter:
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
Um die Beschränkungsrichtlinie zu klären, ersetzen Sie in Ihrer Datei mytype.cpp Folgendes, wenn Sie eine Datei auf Ubuntu Touch schreiben möchten:
QString filename = "text.txt";
durch:
QString filename = "/home/phablet/.local/share/your_app_name/text.txt";