QML: самый простой способ записи в текстовый файл?

7

В настоящее время QML не хватает базовых системных команд, поэтому я ищу самый простой шаблон для записи в /tmp/text.txt .

    
задан Akiva 12.04.2014 в 01:32
источник

3 ответа

4

Новый файл или проект. Выберите приложение QML с плагином C ++. qmake обычно легче подбирать, чем cmake.

Выберите название для своего проекта. Следующий.

Обычно вы можете выбрать только выбранную по умолчанию. Следующий.

Добавьте Bazaar Version Control, так как он хорошо работает с Launchpad. Вы можете попробовать Git, если вы знакомы с ним. Launchpad поддерживает оба варианта, но поддержка Git по-прежнему довольно новая с июля 2016 года.

Измените свой заголовок, добавив три строки из комментариев.

Отредактируйте источник, добавив только функцию внизу.

Измените файл Main.qml, добавив только компонент внизу.

Запустите приложение и найдите текстовый файл в каталоге сборки. Каталог сборки находится в том же каталоге каталога вашего проекта, и он имеет слово «build-» с префиксом к началу.     

ответ дан Akiva 19.04.2014 в 14:59
источник
5

Невозможно записать файл из QML / Javascript, поэтому нам нужно немного C ++ для выполнения задания.

Создайте новый проект Qt Quick 2 Application (Built-in Elements) в Qt Creator с именем FileIO со следующими файлами:

Файл проекта: 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

Файл заголовка: fileio.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

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();
}

И наконец 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();
        }
    }
}

Чтобы создать приложение, откройте терминал и перейдите в папку проекта 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
    
ответ дан Sylvain Pineau 25.04.2014 в 06:26
0

Чтобы уточнить политику ограничения, если вы хотите написать файл на Ubuntu Touch, в файле mytype.cpp замените:

QString filename = "text.txt";

по:

QString filename = "/home/phablet/.local/share/your_app_name/text.txt";
    
ответ дан Antonio Sánchez 12.06.2015 в 07:51