Qt-QML-C++交互实现文件IO系统
来源:互联网 发布:java堆排序 编辑:程序博客网 时间:2024/06/07 18:49
QMl是没有自己的文件IO控制的,这里如果我们需要对文件进行读写操作,那么就需要去C++或者JS完成交互,交互方式有多种,由于我还没有掌握,这里就不介绍具体的交互方式了。这里就简单说明一下我的实现过程。
整个项目布局
文件主要包括正序main文件,C++的IO类文件,包括头文件和Cpp文件以及一个测试用的qml界面文件
这里需要特别注意的是,QML想与C++交互,那么在建立C++类的时候,就必须要包含<QObject>类,这里Qt为我们实现了后多东西,暂时还没有能力来一探究竟,只是知道现在需要继承QObject
这里,为了先吧框架搭起来,我就先简单的写两个函数,一个读文件,一个写文件。
到这里,这个文件的IO系统就基本完成了,下面分享一下代码
main.cpp
#include <QApplication>#include <QQmlApplicationEngine>#include "dlfileiosystem.h"#include <QQmlContext>int main(int argc, char *argv[]){ QApplication app(argc, argv); QQmlApplicationEngine engine; QQmlContext *context = engine.rootContext(); DLFileIOSystem *fileio = new DLFileIOSystem(); context->setContextProperty("FileIOSystem",fileio); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec();}
在这里需要注意的是,我用到了QQmlContext,这里也可以不用,直接使用引擎的设置代理就可以了,但是为了后面更多的添加,这里使用的QQmlContext,所以需要在都文件中包含
#include <QQmlContext>
剩下的就是把我自己写的类作为一个属性暴露给QML
自己写的dlfileiosystem.h
#ifndef DLFILEIOSYSTEM_H#define DLFILEIOSYSTEM_H#include <QObject>#include <QJsonObject>class DLFileIOSystem : public QObject{ Q_OBJECTpublic: explicit DLFileIOSystem(QObject *parent = 0); Q_INVOKABLE QJsonObject DLReadFile(); Q_INVOKABLE bool DLWriteFile();};#endif // DLFILEIOSYSTEM_H
这里需要注意的就是如果想让我们在C++中写的函数可以在QML中调用,需要在声明函数的是加上 Q_INVOKABLE关键字,目前我只是申明了一个读文件,和写文件的两个方法。
cpp中内容
#include "dlfileiosystem.h"DLFileIOSystem::DLFileIOSystem(QObject *parent) : QObject(parent){}QJsonObject DLFileIOSystem::DLReadFile(){ //这里将实现文件的打开并从文件中读取内容 QJsonObject date; return date;}bool DLFileIOSystem::DLWriteFile(){ //这里将实现文件的写入和关闭文件 return true;}
这里只有框架,内容还没有写,因为我还不知道是应该把文件写到XML中,还是普通文件中了。所以还没有写,详细可以看后面更新的文章
QML文件
import QtQuick 2.5import QtQuick.Controls 1.4ApplicationWindow { visible: true width: 1366 height: 768 title: qsTr("FIle IO System") Rectangle { id:btn_open width: 100 height: 30 anchors { right:parent.right bottom:parent.bottom margins:20 } border.color: "#FF0000" border.width: 2 MouseArea { anchors.fill: parent onClicked: { var date = FileIOSystem.DLReadFile() } } Text { anchors.centerIn: parent text: qsTr("打开文件") } } Rectangle { id:btn_close width: 100 height: 30 anchors.right: btn_open.left anchors.rightMargin: 20 anchors.bottom: parent.bottom anchors.bottomMargin: 20 border.color: "#00FF00" border.width: 2 MouseArea { anchors.fill: parent onClicked: { FileIOSystem.DLWriteFile() } } Text { anchors.centerIn: parent text: qsTr("关闭文件") } } TextField { width: 1000 height: 600 anchors { top:parent.top left:parent.left margins:20 } }}
在这个QML文件中,这里有没有做太多内容,只是简单的做了两个按钮,一个打开文件按钮,一个关闭文件按钮,还有一个TextField用来显示和编辑文件。
目前的程序运行结果
1 0
- Qt-QML-C++交互实现文件IO系统
- Qt-QML-C++交互实现文件IO系统-后继-具体文件IO的实现
- Qt-QML-C++交互实现文件IO系统-后继-读取XML文件和创建XML文件
- QML和C++实现交互
- Qt和Qml交互,及多线程
- Qt与Qml交互的小Demo
- QML, Qt C++混合编程--QML与Qt C++ 交互机制探讨与总结
- QT编程QML获取当前系统时间
- QML与Qt C++ 交互机制探讨与总结
- QML与Qt C++ 交互机制探讨与总结
- QML与Qt C++ 交互机制探讨与总结
- Qt C++程序和qml的交互方法
- QML与Qt C++ 交互机制探讨与总结
- qt下qml和c++交互信号槽机制测试
- QML与Qt C++ 交互机制探讨与总结
- Qt移动应用开发:QML与C++的交互
- Qt移动应用开发:QML与Java的交互
- qt quick 串口终端程序(qml 与 c++交互实例)
- 初始化一个express项目
- HTML5 播放器
- 原谅以前我的无知
- java异常处理Exception
- 浅谈 Masonry 布局框架
- Qt-QML-C++交互实现文件IO系统
- 自动化测试登陆模块化——以QQ邮箱登陆为例
- LeetCoder 17. Letter Combinations of a Phone Number
- webpack学习笔记
- 自定义控件 遥控器 上下左右确定 控件
- Linux信号机制与信号处理
- 河南省第十届ACM大赛赛后感(菜鸟版)
- 尼古拉斯特斯拉
- java连接池详解(一)