web-dev-qa-db-de.com

QML: Einfachste Methode zum Schreiben in eine Textdatei?

QML fehlen derzeit grundlegende Systembefehle, daher suche ich nach der einfachsten Vorlage, die ich in /tmp/text.txt schreiben kann.

7
Akiva

Neue Datei oder neues Projekt. Wählen Sie die QML-App mit dem C++ Plugin. qmake ist in der Regel leichter zu holen als cmake. New File or Project

Wählen Sie einen Namen für Ihr Projekt. Nächster. Choose a name for your project

Normalerweise können Sie einfach das ausgewählte Standardframework auswählen. Nächster. Usually you can just choose the default framework selected.

Fügen Sie Bazaar Version Control hinzu, da es gut mit Launchpad zusammenarbeitet. Sie können Git auch ausprobieren, wenn Sie damit vertraut sind. Launchpad unterstützt beide, aber Git-Unterstützung ist seit Juli 2016 noch ziemlich neu. Add Bazaar Version Control, as it works well with Launchpad.

Bearbeiten Sie Ihre Überschrift, indem Sie die drei Zeilen aus den Kommentaren hinzufügen. Edit your header, adding the three lines from the comments.

Bearbeiten Sie Ihre Quelle, indem Sie nur die Funktion unten hinzufügen. Edit your source, adding just the function on the bottom.

Bearbeiten Sie Ihre Main.qml-Datei, indem Sie nur die Komponente unten hinzufügen. Edit your Main.qml file, adding just the component on the bottom.

Führen Sie Ihre Anwendung aus, und suchen Sie die Textdatei in Ihrem Erstellungsverzeichnis. Das Erstellungsverzeichnis befindet sich im selben Verzeichnis wie Ihr Projektverzeichnis, und dem Wort "build-" wird am Anfang das Präfix vorangestellt. Run your application, and find the text file in your build directory.

4
Akiva

Es gibt keine Möglichkeit, von QML/Javascript aus in eine Datei zu schreiben, daher brauchen wir ein bisschen C++, um die Arbeit zu erledigen.

Erstellen Sie in Qt Creator ein neues Qt Quick 2 Application (Built-in Elements) -Projekt mit dem Namen FileIO und den folgenden Dateien:

Die Projektdatei: 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

Die Header-Datei: fileio.h (inspiriert von Lesen und Schreiben von Dateien in 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();
}

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

Öffnen Sie zum Erstellen der Anwendung ein Terminal, und wechseln Sie in den FileIO-Projektordner, und geben Sie Folgendes ein:

`qmake && make && ./FileIO`.

Die Anwendung wird gestartet. Wenn Sie auf die Hauptansicht klicken, wird die Textdatei erstellt und die Anwendung geschlossen.

Update :

Der obige Code funktioniert ohne Einschränkungen für eine Desktop-Anwendung. In Bezug auf Schreibberechtigungen für Ubuntu Touch müssen Sie die Richtlinien zu Beschränkung für Klick-Pakete befolgen:

Die Anwendung verfügt über Lese-/Schreibzugriffsdateien in den Standard-XDG-Basisverzeichnissen. Speziell:

XDG_CACHE_HOME/<APP_PKGNAME>
XDG_CONFIG_HOME/<APP_PKGNAME>
XDG_DATA_HOME/<APP_PKGNAME>
XDG_RUNTIME_DIR/confined/<APP_PKGNAME>

dabei ist APP_PKGNAME das, was im Feld "Name" des Klickmanifests verwendet wird. ZB wenn das Klickmanifest folgendes hat:

$ cat ./manifest.json
{
  "name": "com.ubuntu.developer.you.yourapp",
  ...
}

dann hat die App Lese-/Schreibzugriff auf diese Verzeichnisse und alle Dateien oder Unterverzeichnisse darunter:

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
5
Sylvain Pineau

Um die Beschränkungsrichtlinie zu klären, ersetzen Sie in Ihrer Datei mytype.cpp Folgendes, wenn Sie eine Datei auf Ubuntu Touch schreiben möchten:

QString filename = "text.txt";

durch:

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