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

Иногда вам может понадобиться зайти в вашу биографию и сказать, чтобы она загружалась на диск с вашими установками на нем, если это не происходит автоматически. Сделайте это, перезагрузив компьютер и воспользовавшись некоторыми вариантами клавиши F: например, мой F12, я думаю, я всегда забываю и просто нажимаю их всех, пока я не попаду в биос, если честно.

Из bios вы просто выбираете жесткий диск, который хотите загрузиться, в качестве наиболее важного (не забудьте изменить его после установки, если необходимо)

Если это не сработало, я бы сказал, что это было потому, что вы не форматировал его правильно

Я использую FAT. Тем не менее, я просто устанавливаю ключ usb с помощью unetbootin (все же, я не вижу, чтобы это был другой процесс после форматирования). Форматирование USB довольно прямолинейно, если вы счастливы стереть его, чтобы вы могли рассмотреть этот вариант, если не знаете, как это сделать. Я также обнаружил, что полезно держать загруженный ключ usb под рукой, если что-то идет ужасно неправильно. Я могу легко загрузиться в пробную версию «ubuntu», чтобы восстановить мои файлы, прежде чем очистить систему и начать снова после этого, не теряя пота.

1
задан 30 April 2014 в 14:15

2 ответа

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

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

Файл проекта: FileIO

# 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) 5]

#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

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

To создайте приложение, откройте терминал и перейдите в папку проекта FileIO, чтобы ввести:

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

Запустит приложение. Если вы нажмете на MainView, будет создан текстовый файл, и приложение будет закрыто.

qml / FileIO / main.qml :

Вышеприведенный код будет работайте без ограничений для настольного приложения. Что касается прав на запись для Ubuntu Touch, вам нужно будет следовать рекомендациям о Чтение и запись файлов в QML для пакетов кликов:

Приложение будет иметь файлы доступа для чтения / записи в стандартные базовые каталоги 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
5
ответ дан 24 May 2018 в 09:32
  • 1
    Вы уверены, что выбрали New Qt Quick 2 Application, main.cpp должен быть там (проверен как на 13.10, так и на 14.04). это приложения - & gt; Qt Quick 2 Application (встроенные элементы) для 13.10 и приложений - & gt; Qt Quick Application - & gt; Qt Quick 2 для 14.04 – Sylvain Pineau 27 April 2014 в 01:06
  • 2
    Подождите минуту, это хорошо на скриншоте, второй элемент, Qt Quick Application – Sylvain Pineau 27 April 2014 в 01:24
  • 3
    Фактически, после выбора «Qt Quick Application» вам нужно ввести название и путь проекта, и после этого шага вы можете выбрать «Qt Quick2». в раскрывающемся списке (поведение 14.04) – Sylvain Pineau 27 April 2014 в 01:36
  • 4
    Вы правы для fileio.h, вам нужно создать это вручную. – Sylvain Pineau 27 April 2014 в 01:37
  • 5
    Понимаю, спасибо за улучшение списка возможных решений! – Sylvain Pineau 30 April 2014 в 14:11

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

QString filename = "text.txt";

на:

QString filename = "/home/phablet/.local/share/your_app_name/text.txt";
0
ответ дан 24 May 2018 в 09:32

Другие вопросы по тегам:

Похожие вопросы: