crossplatform.ru

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

> Вопрос по QtScript и массивам ?
AntonTatu
  опции профиля:
сообщение 5.3.2009, 11:15
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 27.11.2008
Пользователь №: 437

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет .

Вот небольшой примерчик:
QScriptValue fun = engine.evaluate("function(a,b){return a+b;}"); //вводим функцию непосредственно в коде С++
QScriptValueList args; //список аргументов
args << QScriptValue(&engine, 5) << QScriptValue(&engine, 7);
QScriptValue y = fun.call(QScriptValue(), args); //5+7=12
int result = y.toNumber();


в нем с использованием QtScript в безымянную функцию передается значение переменных a и b, он работает, но....

Вопрос как в такую функцию передать двумерный массив типа Vector
объявляю я его так:
std::vector < std::vector <char> > *MyMassive;
распределяю память так:
MyMassive = new stdvector < std::vector <char> >(i, std::vector<char> j);
заполняю требуемыми значениями так:
(*MyMassive)[i][j] = чему нибудь
передаю и использую в функциях C++ так:

void MyFun(std::vector < std::vector <char> >& MyMassive)
{
//обход массива
for (int i = 0; i<10; i++)
   for (int i = 0; i<10; i++)
      MyMassive[i][j]
}


Спасибо за ответы ! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
AntonTatu
  опции профиля:
сообщение 5.3.2009, 12:14
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 27.11.2008
Пользователь №: 437

Спасибо сказали: 0 раз(а)




Репутация:   0  


мне блин с этим в жизнь не разобраться..... :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_BRE_*
сообщение 5.3.2009, 12:37
Сообщение #3





Гости








    


QScriptValue arr = scriptEngine->newArray( 10 );
for( int i = 0; i < 10; ++i )
{
    QScriptValue vec = scriptEngine->newArray( 10 );
    for( int j = 0; j < 10; ++j )
        vec.setProperty( j, MyMassive[i][j] );

    arr.setProperty( i, vec );
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AntonTatu
  опции профиля:
сообщение 5.3.2009, 13:29
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 27.11.2008
Пользователь №: 437

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(BRE @ 5.3.2009, 12:37) *
QScriptValue arr = scriptEngine->newArray( 10 );
for( int i = 0; i < 10; ++i )
{
    QScriptValue vec = scriptEngine->newArray( 10 );
    for( int j = 0; j < 10; ++j )
        vec.setProperty( j, MyMassive[i][j] );

    arr.setProperty( i, vec );
}


а что теперь с этим делать ? как это будет работать в функции ?
QScriptValue fun = engine.evaluate("function(a, B ){return a+b;}");
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_BRE_*
сообщение 5.3.2009, 13:44
Сообщение #5





Гости








    


Цитата(AntonTatu @ 5.3.2009, 13:29) *
а что теперь с этим делать ? как это будет работать в функции ?
QScriptValue fun = engine.evaluate("function(a, B ){return a+b;}");


QScriptValue fun = scriptEngine.evaluate("function( arr ) { return arr[ 4 ][ 6 ]; }");
QScriptValueList args;
args << QScriptValue( &scriptEngine, arr );
QScriptValue threeAgain = fun.call( QScriptValue(), args );
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AntonTatu
  опции профиля:
сообщение 5.3.2009, 15:37
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 27.11.2008
Пользователь №: 437

Спасибо сказали: 0 раз(а)




Репутация:   0  


Гость_BRE, огромное спасибо за помощь, только все равно не компилируется пишет ошибку в строчке:
vec.setProperty( j, MyMassive[i][j] );
где ошибка ?

повторюсь, массив MyMassive создаю вот так:
std::vector < std::vector <char> > *MyMassive;
MyMassive = new std::vector < std::vector <char> >(10, std::vector<char> 10);

для того что бы его заполнить вызываю его вот так:
for( int i = 0; i < 10; ++i )
{
    for( int j = 0; j < 10; ++j )
       (*MyMassive)[i][j] = 5;


спасибо заранее...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_BRE_*
сообщение 5.3.2009, 15:40
Сообщение #7





Гости








    


Цитата(AntonTatu @ 5.3.2009, 15:37) *
огромное спасибо за помощь, только все равно не компилируется пишет ошибку в строчке:
vec.setProperty( j, MyMassive[i][j] );


vec.setProperty( j, (*MyMassive)[i][j] );
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AntonTatu
  опции профиля:
сообщение 5.3.2009, 16:11
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 27.11.2008
Пользователь №: 437

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(BRE @ 5.3.2009, 15:40) *
vec.setProperty( j, MyMassive[i][j] );


в общем начало сделать получилась вот так что бы заработало:
QScriptEngine engine;
QScriptValue arr = scriptEngine->newArray( 10 );
for( int i = 0; i < 10; ++i )
{
    QScriptValue vec = scriptEngine->newArray( 10 );
    for( int j = 0; j < 10; ++j ){
        
        QScriptValue temp(&engine, (*MyMassive)[i][j]);
        vec.setProperty( j, temp );  
          }

    arr.setProperty( i, vec );
}


но теперь ругается на:

args << QScriptValue( &engine, arr );

ошибка: Ни одна из 9 перегрузок не может преобразовать все типы аргументов, как здесь исправить ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_BRE_*
сообщение 5.3.2009, 16:16
Сообщение #9





Гости








    


args << arr;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AntonTatu
  опции профиля:
сообщение 5.3.2009, 17:44
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 27.11.2008
Пользователь №: 437

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(BRE @ 5.3.2009, 16:16) *
args << arr;


СПАСИБО ОГРОМНОЕ ВСЕ РАБОТАЕТ !!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 8:50