QML:写入文本文件的最简单方法?

QML:写入文本文件的最简单方法?

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

新建文件或项目。选择带有 C++ 插件的 QML App。qmake 通常比 cmake 更容易上手。 新建文件或项目

为你的项目选择一个名称。下一步。 为您的项目选择一个名称

通常,您只需选择默认框架即可。下一步。 通常您只需选择默认框架即可。

添加 Bazaar 版本控制,因为它与 Launchpad 配合良好。如果您熟悉 Git,也可以尝试一下。Launchpad 支持两者,但截至 2016 年 7 月,Git 支持仍然很新。 添加 Bazaar 版本控制,因为它与 Launchpad 配合良好。

编辑标题,添加来自评论的三行。 编辑标题,添加来自评论的三行。

编辑您的源代码,仅添加底部的功能。 编辑您的源代码,仅添加底部的功能。

编辑您的 Main.qml 文件,仅添加底部的组件。 编辑您的 Main.qml 文件,仅添加底部的组件。

运行您的应用程序,然后在构建目录中找到文本文件。构建目录位于您的项目目录的同一目录中,其开头带有“build-”字样。 运行您的应用程序,并在您的构建目录中找到文本文件。

答案3

只是为了澄清限制政策,如果您想在 Ubuntu Touch 上编写文件,请在文件 mytype.cpp 中替换:

QString filename = "text.txt";

经过:

QString filename = "/home/phablet/.local/share/your_app_name/text.txt";

相关内容