在QML(Qt)中读写文件 [英] Reading and writing files in QML (Qt)

查看:26
本文介绍了在QML(Qt)中读写文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试实现Reading and writing files in QML,无意中看到了来自诺基亚的链接文章,但未能成功使用这个看似显而易见的代码示例。我想我不必说我在这个领域完全是新手。

我应该将此代码段(这是页面上的第二个代码段)放在哪里。 ):

#include "fileio.h"
Q_DECL_EXPORT int main(int argc, char *argv[])
{
    qmlRegisterType<FileIO, 1>("FileIO", 1, 0, "FileIO");
}

当我将上面的代码片段放在我的主窗体中时,我还不断收到关于没有在上下文中注册qmlRegisterType的错误。 有没有人能就如何实现这一点(或任何在QML/Qt中读写文件的方法)提供一些建议?

qml

本教程中诺基亚编写的示例不是纯推荐答案程序。它同时包含C++和QML。这类程序通常是加载并呈现QML文件的C++程序。C++程序通常以名为int main(int argc, char *argv[]);的函数开始。在您的示例中,加载QML主文件(main.qml)文件并呈现它的就是这个"main()"函数。

但是在加载QML主文件之前,您必须告诉QML系统您将使用名为FileIO的自定义QML类。为此,您必须使用int qmlRegisterType<T>(const char * package, int majorVersion, int minorVersion, char * classNameInQML);C++函数。大概需要5个参数:

  • T:C++模板参数。它是您的C++类(FileIO)。
  • :所有的QML类都在包中,都是版本化的。这是包的名称。
  • MajorVersion:所有QML类都在已版本化的包中。这是包的主版本号。
  • minorVersion:所有QML类都在已版本化的包中。这是包的次版本号。
  • classNameInQML:所有QML类都在已版本化的包中。这是您将在QML文件中使用的类的名称,大多数情况下该名称与C++类名称相同。

要使用此函数,您必须在编写该函数的C++文件中包含一个C++头文件:

  • 如果使用Qt4,则表头为<QtDeclarative>
  • 如果使用Qt 5,则表头为<QtQml>

最后,您应该有如下内容:

main.cpp(带有main()C++函数的文件):

// C++ header to include for using qmlRegisterType();
#include <QtDeclarative>    // If you use Qt4
#include <QtQml>            // If you use Qt5

// Some stuff used by the main(); function
#include <QApplication>
#include <QLatin1String>

#include "ui/qtquickapplicationviewer.hpp"    // Something which manages your QML files. Qt Creator will generate it for you if you use it to code..
#include "fileio.h"    // Your FileIO C++ class

/**
 * @fn Q_DECL_EXPORT int main(int argc, char *argv[])
 * @brief The C++ main(); function. Your program begins HERE.
 */
Q_DECL_EXPORT int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // ...

    // Declaring your C++ class to the QML system
    qmlRegisterType<FileIO>("MyCustomClasses", 1, 0, "FileIOQML");

    // ...

    // Loading your main QML file
    QLatin1String mainQMLFile = "./ui/qml/main.qml";
    QtQuickApplicationViewer viewer;
    viewer.setMainQmlFile(mainQMLFile);

    // Showing how beautiful your QML interface is :)
    viewer.showExpanded();

    // Now let's play with your QML interface is :)
    return app.exec();
}

要加载的main.qml文件(直接来自诺基亚教程):

import QtQuick 1.1
import MyCustomClasses 1.0

Rectangle {
    width: 360
    height: 360
    Text {
        id: myText
        text: "Hello World"
        anchors.centerIn: parent
    }

    FileIOQML {
        id: myFile
        source: "my_file.txt"
        onError: console.log(msg)
    }

    Component.onCompleted: {
        console.log( "WRITE"+ myFile.write("TEST"));
        myText.text =  myFile.read();
    }
}

注意:我更改了诺基亚教程中的一些"FileIO"以避免混淆。

这篇关于在QML(Qt)中读写文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆