还是谢谢你。我通过引入 C++ 模块解决了这个问题。
#ifndef FILECONTENT_H
#define FILECONTENT_H
#include <QObject>
#include <QFile>
#include <QTextStream>
class FileContent : public QObject
{
Q_OBJECT
public:
Q_PROPERTY(QString content READ getContent WRITE setContent)
Q_PROPERTY(QString filename READ getFileName WRITE setFileName)
Q_PROPERTY(QString dir READ getDir WRITE setDir)
Q_INVOKABLE QString getContent();
Q_INVOKABLE void setContent(QString s);
Q_INVOKABLE QString getFileName();
Q_INVOKABLE QString getDir();
Q_INVOKABLE void setDir(QString s);
FileContent(QObject *parent = 0);
~FileContent();
private:
QFile *file;
QString content;
QString filename;
QString dir;
public slots:
void setFileName(const QString& filename);
void clearContent();
};
#endif // FILECONTENT_H
#include "filecontent.h"
#include <QDebug>
FileContent::FileContent(QObject *parent) {
}
FileContent::~FileContent() {
delete file;
}
QString FileContent::getFileName() {
return this->filename;
}
QString FileContent::getDir()
{
//I need to get file from specific directory path
QString envVarName_equip = "MPCVD_MODEL";
this->dir=qEnvironmentVariable(envVarName_equip.toStdString().c_str());
return dir+ '\\';
}
void FileContent::setDir(QString s)
{
file = new QFile(s);
}
void FileContent::setFileName(const QString &filename) {
this->filename = filename;
file = new QFile(getDir() + '\\' + filename);
}
QString FileContent::getContent() {
if( content.length() == 0 ) {
file->open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream in(file);
in.setCodec("UTF-8");//set format here
content = in.readAll();
if( content.length() == 0) {
qDebug() << "[Warning] FileContent: file " << this->filename << "is empty" << endl;
}
}
return content;
}
void FileContent::setContent(QString s)
{
file->open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream in(file);
in.setCodec("UTF-8");//set format here
in<<s;
}
void FileContent::clearContent() {
content.clear();
}
在main.cpp注册后,
qmlRegisterType<FileContent>("test.filecontent", 1, 0, "FileContentItem");
只是导入这个模块,
import test.filecontent 1.0
并使用如下:
Button{
id:genjson
text: qsTr("generate JSON")
onClicked: {
fileDialog.processContent(new Date().toLocaleString(Qt.locale(), 'yyyyMMdd')+".mpcvd",CJS.genjson())
}
}
FileContentItem {
id: fileDialog
filename: "default.mpcvd"
property bool ready: false
function processContent(source,content) {
if( source !== undefined ) {
filename = source;
}
setContent(content);
clearContent(); // save memory
}
}