在QML(Qt)中读写文件 [英] Reading and writing files in QML (Qt)
本文介绍了在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屋!
查看全文