Não há como escrever em um arquivo a partir do QML / Javascript, então precisamos de um pouco de C ++ para fazer o trabalho.
Crie um novo projeto Qt Quick 2 Application (Built-in Elements)
no Qt Creator chamado FileIO com os seguintes arquivos:
O arquivo do projeto: 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
O arquivo de cabeçalho: fileio.h (inspirado por Lendo e escrevendo arquivos no 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();
}
E finalmente 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();
}
}
}
Para criar o aplicativo, abra um Terminal e vá para a pasta do projeto FileIO para digitar:
'qmake && make && ./FileIO'.
Ele iniciará o aplicativo. Se você clicar no MainView, o arquivo de texto será criado e o aplicativo será fechado.
Atualizar :
O código acima funcionará sem restrições para um aplicativo de desktop. Quanto às permissões de gravação para o Ubuntu Touch, você terá que seguir as orientações sobre confinamento para pacotes de cliques:
O aplicativo terá arquivos de acesso de leitura / gravação no XDG padrão
diretórios base. Especificamente:
XDG_CACHE_HOME/<APP_PKGNAME>
XDG_CONFIG_HOME/<APP_PKGNAME>
XDG_DATA_HOME/<APP_PKGNAME>
XDG_RUNTIME_DIR/confined/<APP_PKGNAME>
em que APP_PKGNAME é o usado no campo "nome" do manifesto de cliques. Por exemplo, se o manifesto de cliques tiver isto:
$ cat ./manifest.json
{
"name": "com.ubuntu.developer.you.yourapp",
...
}
o aplicativo terá acesso de leitura / gravação a esses diretórios e qualquer
arquivos ou subdiretórios abaixo deles:
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