Russian Qt Forum
Ноябрь 24, 2024, 14:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QScriptValue::Undeletable  (Прочитано 2141 раз)
hindsight
Гость
« : Август 23, 2012, 12:53 »

Здравствуйте!
Подскажите пожалуйста, если кто знает.
Я использую модуль QtScript, мне нужно создать некоторое глобальное свойство (конкретнее, имя пользователя программы, от которого скрипт запущен), доступное скрипту во время его работы, но чтобы его нельзя было поменять никаким способом.
Пока я написал следующее:
Код
C
QScriptValue functionUSER(QScriptContext *context, QScriptEngine *engine)
{
if(context->isCalledAsConstructor() || context->argumentCount() != 0)
qDebug() << "INVALID CALL OF FUNCTION USER";
return QScriptValue("user");
}
...
int main(int argc, char **argv)
...
QScriptEngine engine;
engine.globalObject().setProperty("user", engine.newFunction(functionUSER), QScriptValue::PropertyGetter | QScriptValue::PropertySetter | QScriptValue::Undeletable);
 
Насколько я понял из документации, флаг Undeletable делает как раз то, что мне нужно. Но запуск простешей программы показывает, что я неправ:

Код
Javascript
print(user); // user
user = "root";
print(user); // user, everything is ok
delete user;
user = "root";
print(user); // root, after deleting any value can be assigned, totally not ok :(
 

Скажите, что я сделал не так? И есть ли способ создать такую скриптовую переменную - чтобы её нельзя никак было изменить или удалить.
Заранее спасибо.
Записан
hindsight
Гость
« Ответ #1 : Октябрь 18, 2012, 19:15 »

Неужели никто не сталкивался с подобной проблемой?
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #2 : Октябрь 19, 2012, 07:57 »

Использовать метод для взятия имени пользователя ?


    Q_PROPERTY(QString user READ user WRITE setUser)
    Q_INVOKABLE QString user (){ return m_user;}
    void setUser (QString u){ m_user = u;}


а в скрипте брать имя пользователя только используя метод

var js_user;
.....
if(js_user != qtObj.user ())
  return "Error autentification.";


К setUser() в скрипте доступности не будет т.к. он объявлен не INVOKABLE
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 23.