20Апр/120
[QtScript] Получить доступ из пользовательской функции к интерфейсу.
Продолжаем извращаться.
Захотелось мне написать свою функцию print для QtScript чтобы вывод шел в QTextEdit.
Класс, который содержит в себе TextEdit у меня зовётся Widget
Функция (Вне классов):
QScriptValue funcPrint(QScriptContext *context, QScriptEngine *engine) { QString result; for (int i = 0; i < context->argumentCount(); ++i) { if (i > 0) result.append(" "); result.append(context->argument(i).toString()); } Widget *bgg = (Widget*)engine->parent(); bgg->print(result); return engine->undefinedValue(); }
Регистрируем:
engine->globalObject().setProperty("print", engine->newFunction(funcPrint, 1));
Метод банален:
void Widget::print(QString aStr) { ui->TextEdit->append(aStr); }
Тонкости:
engine является членом класса Widget (приватным) и инициализируется:
engine = new QScriptEngine(this);
Обязательно указать родителя! Иначе его потом не получить и будет segfault
Соответственно можно объявить engine и не указателем.
Тогда обязательно(!) инициализировать в конструкторе:
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget), engine(this) //!!!!! { ui->setupUi(this); ... }
Комментарии (0)
Пинги (0)
(подписаться на новые комментарии в этой ветке)
Нет обратных ссылок на эту запись.
Leave a comment