2015-05-07 6 views
0

Я хотел бы получить доступ к массиву целых чисел, который был создан где-то в моем основном приложении из QtScript, и после выполнения любых манипуляций, которые скрипт может выполнить, вернет обратно.Манипулировать 2d-массив из QtScript

Что я могу работать до сих пор - это одиночные значения (например, целое или логическое), и я не видел примера того, что я описываю.

Есть ли способ сделать это, или мне придется читать данные по одному?

+0

Вы пробовали инкапсулирования массив в QOBJECT? – danielfranca

+0

привет @ danielfranca, нет, я боюсь, я еще не знаю, как это сделать. – dearn44

ответ

0

Вы можете попытаться объединить свой 2d-массив в класс QObject, как указано здесь: http://doc.qt.io/qt-5/qtscript-index.html и добавить некоторые способы его манипулирования.

Нечто подобное (не проверял код, поэтому может содержать некоторые ошибки и довольно сырыми)

class MyArray: public QObject { 
    int** m_array; 
    public: 
    Q_OBJECT 
    MyArray(signed int x, signed int y) { 
     m_array = new MyArray[x][y]; 
    } 
    ~MyArray() { delete m_array; } 

    Q_INVOKABLE int at(signed int x, signed int y) { 
     if (m_array) return m_array[x][y]; 
    } 
    ... 
} 

Чем присвоить его свойству QtScript:

MyArray *array2d = new MyArray(10, 5); 
QScriptValue arrayValue = engine.newQObject(array2d); 
engine.globalObject().setProperty("array2d", arrayValue); 
+0

Я проверю ваше решение, похоже, хорошая идея. То, что я закончил делать, ожидая вашего ответа, создает две функции: int MainWindow :: getValueAt (int x, int y) 'и' void setValueAt (int x, int y, int Val) 'И добавил их как общедоступные слоты для мой основной класс, чтобы получить к ним доступ из сценария. – dearn44

 Смежные вопросы

  • Нет связанных вопросов^_^