QtScript: Работа с файлами |
Здравствуйте, гость ( Вход | Регистрация )
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 f = new QSFile("nkl_" + nnom + ".json", 2); ... а для сети делаю класс qsSMTP для отправки накладной по почте. Удачи ! Сообщение отредактировал JohnZ - 10.11.2017, 18:38 |
|
|
Текстовая версия | Сейчас: 28.11.2024, 0:58 |