web-dev-qa-db-fra.com

QML: Le moyen le plus simple d'écrire dans un fichier texte?

QML pour le moment manque de commandes système de base, je recherche donc le modèle le plus simple pour écrire sur /tmp/text.txt.

7
Akiva

Nouveau fichier ou projet. Choisissez l'application QML avec le plugin C++. qmake est généralement plus facile à ramasser que cmake. New File or Project

Choisissez un nom pour votre projet. Prochain. Choose a name for your project

Habituellement, vous pouvez simplement choisir le framework par défaut sélectionné. Prochain. Usually you can just choose the default framework selected.

Ajoutez Bazaar Version Control, car cela fonctionne bien avec Launchpad. Vous pouvez aussi essayer Git si vous le connaissez bien. Launchpad prend en charge les deux, mais le support Git est encore assez nouveau à compter de juillet 2016. Add Bazaar Version Control, as it works well with Launchpad.

Modifiez votre en-tête en ajoutant les trois lignes des commentaires. Edit your header, adding the three lines from the comments.

Modifiez votre source en ajoutant simplement la fonction en bas. Edit your source, adding just the function on the bottom.

Modifiez votre fichier Main.qml en ajoutant uniquement le composant situé en bas. Edit your Main.qml file, adding just the component on the bottom.

Exécutez votre application et recherchez le fichier texte dans votre répertoire de construction. Le répertoire de construction se trouve dans le même répertoire que votre répertoire de projet et le mot "build-" est préfixé au début. Run your application, and find the text file in your build directory.

4
Akiva

Il n'y a aucun moyen d'écrire dans un fichier à partir de QML/Javascript, nous avons donc besoin d'un peu de C++ pour faire le travail.

Créez un nouveau projet Qt Quick 2 Application (Built-in Elements) dans Qt Creator appelé FileIO avec les fichiers suivants:

Le fichier de projet: 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

Le fichier d'en-tête: fileio.h (inspiré par lecture et écriture de fichiers au format 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();
}

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

Pour construire l'application, ouvrez un terminal et allez dans le dossier du projet FileIO pour taper:

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

Il va lancer l'application. Si vous cliquez sur MainView, le fichier texte sera créé et l'application fermée.

Mise à jour :

Le code ci-dessus fonctionnera sans restrictions pour une application de bureau. En ce qui concerne les autorisations d’écriture pour Ubuntu Touch, vous devrez suivre les instructions relatives à Confinement pour les packages de clics:

L'application disposera de fichiers d'accès en lecture/écriture dans les répertoires de base XDG standard. Plus précisément:

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

où APP_PKGNAME est ce qui est utilisé dans le champ "nom" du manifeste de clic. Par exemple, si le manifeste de clic contient ceci:

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

alors l'application aura un accès en lecture/écriture à ces répertoires et à tous les fichiers ou sous-répertoires qu'ils contiennent:

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

Juste pour clarifier la politique de confinement, si vous voulez écrire un fichier sur Ubuntu Touch, dans votre fichier mytype.cpp, remplacez:

QString filename = "text.txt";

par:

QString filename = "/home/phablet/.local/share/your_app_name/text.txt";
0
Antonio Sánchez