QML 目前缺少基本的系统命令,所以我正在寻找最简单的模板来写入/tmp/text.txt
。
答案1
无法从 QML/Javascript 写入文件,所以我们需要一点 C++ 来完成这项工作。
Qt Quick 2 Application (Built-in Elements)
在 Qt Creator 中创建一个名为文件IO包含以下文件:
项目文件:文件IO
# 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
头文件:文件io.h(灵感来自在 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
主程序:
#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();
}
最后qml/文件IO/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();
}
}
}
要构建应用程序,请打开终端并转到 FileIO 项目文件夹以输入:
`qmake && make && ./FileIO`.
它将启动应用程序。如果您单击 MainView,将创建文本文件并关闭应用程序。
更新:
上述代码对于桌面应用程序来说没有任何限制。关于 Ubuntu Touch 的写入权限,您必须遵循以下指南禁闭对于点击包:
应用程序将在标准 XDG 基础目录中拥有读/写访问文件。具体来说:
XDG_CACHE_HOME/<APP_PKGNAME> XDG_CONFIG_HOME/<APP_PKGNAME> XDG_DATA_HOME/<APP_PKGNAME> XDG_RUNTIME_DIR/confined/<APP_PKGNAME>
其中 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
答案2
答案3
只是为了澄清限制政策,如果您想在 Ubuntu Touch 上编写文件,请在文件 mytype.cpp 中替换:
QString filename = "text.txt";
经过:
QString filename = "/home/phablet/.local/share/your_app_name/text.txt";