crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QtScript: Работа с файлами
JohnZ
  опции профиля:
сообщение 2.11.2017, 12:37
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Нужно read/write txt/bin файлы, ес-сно из QT скрипта.
QT 4.8.2
Гугл ничего полезного, кроме fileReader() которого нет в QT Script, не выдаёт.
Нужно накладную в XML / JSON-е выгрузить в файл для отправки.

Подскажите плз, это нужно его ( QFile ) дописать самому в движок ?
Может уже есть у кого сей объект, поделитесь если не жалко.
Заранее благодарен за помощь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 9.11.2017, 12:53
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Народ, аууу ! Вопрос актуален ! Или в скриптах ниХто не пользуется файлами ?!
Не верю ... ( Почти по Ст-му :-) )
Про генератор обёртки я в курсе, но я так и не смог на RPi-2 его зпустить для QT 4.8.2,
да и по другим причинам не хотелось-бы его юзать ...
Вобщем HELP ещё раз ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 10.11.2017, 0:42
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Я когда делал просто делал функцию сишную, которая сохраняла файл, и ее дергал из скрипта когда нужно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.11.2017, 1:47
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Я не юзаю Qt, но у меня есть идея, что для сети файл - это тоже ресурс вида file://bla-bla-bla/myfile.bin и может быть эта хрень сможет таким образом его считать, как сетевой ресурс?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 10.11.2017, 18:21
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 139
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


БлагоДарю за ответы !
СлепилЪ я этот класс, может кому-то и пригодится, - ловите.

H
Раскрывающийся текст

#ifndef __QSFILE_H__
#define __QSFILE_H__

#include <QFile>
#include <QObject>
#include <QtScript>
#include <QIODevice>

//Q_DECLARE_METATYPE(QSFile *)

class QSFile : public QObject
{
Q_OBJECT

public:

QSFile(QObject *parent = 0);
// QSFile(QString Name, int type);
~QSFile();

public slots:

Q_INVOKABLE bool Open(QString fn, int type);
Q_INVOKABLE void Close();

Q_INVOKABLE QByteArray Read(qint64 maxSize);
Q_INVOKABLE QByteArray ReadAll() { return qFd->readAll(); }
Q_INVOKABLE QByteArray ReadLine(qint64 maxSize = 0) { return qFd->readLine(maxSize); }

// Q_INVOKABLE qint64 Write(const QByteArray data);
Q_INVOKABLE qint64 Write(const QString data);

Q_INVOKABLE int getChar();
Q_INVOKABLE bool putChar(int c);

// Q_INVOKABLE QString fileName() { return fName; }
// Q_INVOKABLE void setFileName(QString name) { fName = name; }

Q_INVOKABLE bool atEnd() { return qFd->atEnd(); }
Q_INVOKABLE bool isOpen() { return qFd->isOpen(); }
Q_INVOKABLE qint64 pos() { return qFd->pos(); }
Q_INVOKABLE qint64 size() { return qFd->size(); }
Q_INVOKABLE bool seek(qint64 pos) { return qFd->seek(pos); }
Q_INVOKABLE bool flush() { return qFd->flush(); }

protected:

int iType;
QFile *qFd;
QString fName;
};

Q_SCRIPT_DECLARE_QMETAOBJECT(QSFile, QObject *)

void setupQSFile(QScriptEngine *engine);

#endif


CPP
Раскрывающийся текст


#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>

#include "qsfile.h"


QSFile::QSFile(QObject *parent) : QObject(parent)
{
qFd = 0;
iType = 0;
fName.clear();
setObjectName("QSFile");
}

//QSFile::QSFile(QString Name, int type) : QObject(0)
//{
// qFd = 0;
// iType = type;
// fName = Name;
// setObjectName("QSFile");
// Open(Name, type);
//}

QSFile::~QSFile()
{
if (qFd)
Close();
}

bool QSFile::Open(QString fn, int type) // Y
{
bool rc;
QString fPath;

if (qFd && qFd->isOpen())
Close();

iType = type;

QIODevice::OpenMode Mode = QIODevice::NotOpen;

if (type & 1) Mode |= QIODevice::ReadOnly;
if (type & 2) Mode |= QIODevice::WriteOnly;
if (type & 16) Mode |= QIODevice::Text;

if (fn.isEmpty())
fName = QFileDialog::getOpenFileName(0, "Open File", fPath, "files (*.*)");
else fName = fn;

if (fName.isEmpty())
return false;

qFd = new QFile(fName);

rc = qFd->open(Mode);

if (!rc)
{
QMessageBox::warning(0, "MyProg", "Error open File !");
return false;
}

return true;
}

void QSFile::Close()
{
if (!qFd) return;
if (qFd->isOpen())
qFd->close();

delete qFd;
qFd = 0;
}

QByteArray QSFile::Read(qint64 maxSize)
{
return qFd->read(maxSize);
}

//qint64 QSFile::Write(const QByteArray data)
//{
// return qFd->write(data);
//}

qint64 QSFile::Write(const QString data)
{
// QByteArray Array = byteArray.toUtf8();
// QByteArray Array = byteArray.toAscii();
QByteArray Array = data.toLocal8Bit();
return qFd->write((const QByteArray &) Array);
}

bool QSFile::putChar(int c)
{
return qFd->putChar((char ) c);
}

int QSFile::getChar()
{
int c = 0;
qFd->getChar((char *) &c);
return c;
}

void setupQSFile(QScriptEngine *engine)
{
QScriptValue fileClass = engine->scriptValueFromQMetaObject<QSFile>();
engine->globalObject().setProperty("QSFile", fileClass);
}


Но есть несколько траблов, - QT Script в упор не хочет видеть заремленый конструктор (потому и заремил),
и так-же почему-то не понимает QByteArray ???
Тестил пока только на запись.
Юзается просто
    
       var json =" bla-bla-bla "
       var f = new QSFile();
    f.Open("nkl_" + nnom + ".json", 2);
    f.Write(json);
    f.Close();
    delete f;


а хотелось-бы

var f = new QSFile("nkl_" + nnom + ".json", 2);

... а для сети делаю класс qsSMTP для отправки накладной по почте.

Удачи !

Сообщение отредактировал JohnZ - 10.11.2017, 18:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 0:58