Здравствуйте.
Мне нужно додавить функцию-член класса в 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);
}
Благодарю Вас за Ваши ответы.