Управление двумерным массивом из QtScript

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

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

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


person dearn44    schedule 07.05.2015    source источник
comment
Вы пытались инкапсулировать массив в QOBJECT?   -  person dfranca    schedule 07.05.2015
comment
привет @danielfranca, нет, боюсь, я еще не знаю, как это сделать.   -  person dearn44    schedule 07.05.2015


Ответы (1)


Вы можете попробовать инкапсулировать свой 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);
person dfranca    schedule 07.05.2015
comment
Я проверю ваше решение, это кажется хорошей идеей. В итоге, ожидая вашего ответа, я создал две функции int MainWindow::getValueAt(int x, int y) и void setValueAt(int x, int y, int Val) и добавил их в качестве общедоступных слотов в мой основной класс, чтобы получить к ним доступ из скрипта. - person dearn44; 07.05.2015