crossplatform.ru

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


  Ответ в Нет доступа к функции класса из скриптов
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
mva Дата 19.12.2010, 23:33
  Спасибо за ответ. Действительно, все оказалось просто - нужно было в скрипте обращаться к windowTitle() как к свойству, а не как к функции. Функцию setWindowsTitle() убрал в дочернем классе. Похоже, что вообще нет необходимости создавать обертку для класса QDialog. Сейчас попробовал - работает и без нее.
igor_bogomolov Дата 19.12.2010, 18:37
  Ну, во первых, void setWindowTitle(const QString &title);. Иначе вы скрываете уже существующую функцию. И доступ до неё из скриптов должен быть по умолчанию, т.к. это слот.

Попробуйте так,
class MyDialog : public QDialog {
    Q_OBJECT
    Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle SCRIPTABLE true)
public:
    explicit MyDialog(QWidget *parent = 0);
    QString windowTitle() { return QDialog::windowTitle(); }
};



---Добавлено ---
Вы уверены, что вы всё правильно делаете. Сделал сейчас тестовое приложение
    QScriptEngine *engine = new QScriptEngine(this);
    QDialog *w= new QDialog(this);

    QScriptValue scriptDialog = engine->newQObject(w);
    engine->globalObject().setProperty("dialog", scriptDialog);

    engine->evaluate("dialog.windowTitle = \"Title\"");

    qDebug() << scriptDialog.property("windowTitle").toString(); // -> "Title"
    scriptDialog.property("show").call();

Доступ до windowTitle есть, всё нормально работает
mva Дата 19.12.2010, 16:22
  Добрый день всем!

Делаю "обёртку" для класса QDialog, которая делает некоторые функции этого класса доступными в скриптах. Споткнулся на публичной функции QString windowTitle(). Скрипт в упор не хочет его видеть. Если слегка изменить название функции, то работает прекрасно.

class MyDialog : public QDialog {
    Q_OBJECT
public:
    explicit MyDialog(QWidget *parent = 0);
    Q_INVOKABLE void setWindowTitle(QString title) { QDialog::setWindowTitle(title); }  // работает
    Q_INVOKABLE QString windowTitle() { return QDialog::windowTitle(); }                   // НЕ РАБОТАЕТ
    Q_INVOKABLE QString myWindowTitle() { return QDialog::windowTitle(); }              // с измененным названием работает
};


Что не так?

Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 16:56