Невозможно записать файл из QML / Javascript, поэтому нам нужно немного C ++ для выполнения задания.
Создайте новый проект Qt Quick 2 Application (Built-in Elements) в Qt Creator с именем FileIO со следующим файлы:
Файл проекта: FileIO
# 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
Файл заголовка: fileio.h (вдохновлен чтением и записью файлов в QML) 5]
#ifndef FILEIO_H
#define FILEIO_H
#include
#include
#include
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
fileio.h :
#include
#include "qtquick2applicationviewer.h"
#include
#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();
}
И, наконец, 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();
}
}
}
To создайте приложение, откройте терминал и перейдите в папку проекта FileIO, чтобы ввести:
`qmake && make && ./FileIO`.
Запустит приложение. Если вы нажмете на MainView, будет создан текстовый файл, и приложение будет закрыто.
qml / FileIO / main.qml :
Вышеприведенный код будет работайте без ограничений для настольного приложения. Что касается прав на запись для Ubuntu Touch, вам нужно будет следовать рекомендациям о Чтение и запись файлов в QML для пакетов кликов:
Приложение будет иметь файлы доступа для чтения / записи в стандартные базовые каталоги XDG. В частности:XDG_CACHE_HOME/
XDG_CONFIG_HOME/
XDG_DATA_HOME/
XDG_RUNTIME_DIR/confined/
, где APP_PKGNAME - это то, что используется в поле «имя» манифеста клика. Например, если манифест клика имеет это: $ cat ./manifest.json
{
"name": "com.ubuntu.developer.you.yourapp",
...
}
, то приложение будет иметь доступ для чтения / записи к этим каталогам и любым файлам или поддиректориям под ними: 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