Название: Как добавить функцию-член класса в QScriptEngine
Отправлено: Sacha_D от Апрель 19, 2013, 15:40
Здравствуйте. Мне нужно додавить функцию-член класса в QScriptEngine. Как это сделать правильно? .h файл class MainWindow : public QMainWindow { Q_OBJECT private: QScriptEngine scriptEngine; void setupFirst(); public: QScriptValue appendDevice(QScriptContext *ctx, QScriptEngine *eng); }; .cpp файл void MainWindow::setupFirst() { this->scriptEngine.globalObject().setProperty("appendDevice", this->scriptEngine.newFunction( boost::bind(&MainWindow::appendDevice, this, _1, _2), 3) ); // Как правильно? }
QScriptValue MainWindow::appendDevice(QScriptContext *ctx, QScriptEngine *eng){
QString functionDescription = tr("Формат функции ") + "bool appendDevice(QString name, int address, const QString portName," + "const int rate = 115200," + "const QString config = \"\");"; if (ctx->argumentCount() < 3){ return ctx->throwError(QScriptContext::SyntaxError, tr("Недостаточно аргументов. ") + functionDescription); } QString name; int address; QString portName; if (ctx->argumentCount() >= 3){ if (ctx->argument(0).isString()) { name = ctx->argument(0).toString(); } else { return ctx->throwError(QScriptContext::TypeError, tr("Аргумент [0] (Имя устройства) должен быть строкой. ") + functionDescription); }
if (ctx->argument(1).isNumber()) { address = ctx->argument(1).toInt32(); } else { throw ctx->throwError(QScriptContext::TypeError, tr("Аргумент [1] (Адрес устройства) должен быть числом. ") + functionDescription); }
if (ctx->argument(2).isString()) { portName = ctx->argument(2).toString(); } else { throw ctx->throwError(QScriptContext::TypeError, tr("Аргумент [2] (порт устройства) должен быть строкой. ") + functionDescription); } } int rate = QExtSerialPortAux::rateToInt(QExtSerialPortAux::defaultRate); QString config;
if (ctx->argumentCount() >= 4){ if (ctx->argument(3).isNumber()) { rate = ctx->argument(3).toInt32(); } else { throw ctx->throwError(QScriptContext::TypeError, tr("Аргумент [3] (Скорость порта устройства) должен быть числом. ") + functionDescription); } } if (ctx->argumentCount() >= 5){ if (ctx->argument(4).isString()) { config = ctx->argument(4).toString(); } else { throw ctx->throwError(QScriptContext::TypeError, tr("Аргумент [4] (Конфигурация устройства) должен быть строкой. ") + functionDescription); } }
return appendDeviceFromScript(name, address, portName, rate, config); }
Благодарю Вас за Ваши ответы.
Название: Re: Как добавить функцию-член класса в QScriptEngine
Отправлено: dio от Апрель 19, 2013, 16:16
Как вариант, передать в scriptEngine объект. см. http://qt-project.org/doc/qt-4.8/qscriptengine.html#qobject-integration (http://qt-project.org/doc/qt-4.8/qscriptengine.html#qobject-integration)
Название: Re: Как добавить функцию-член класса в QScriptEngine
Отправлено: Sacha_D от Апрель 22, 2013, 09:17
Благодарю. Так и сделал.
|