Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: roxton от Октябрь 24, 2008, 13:12



Название: QTextCursor и QScriptEngine
Отправлено: roxton от Октябрь 24, 2008, 13:12
Пытаюсь добавить для видимости в скриптах QTextCursor. Примерно вот так:

QTextCursor tc = textEdit->textCursor();
QScriptValue cr = script_engine.newQObject(&tc);

И не хочет компилироваться:

rvln.cpp:4704: error: no matching function for call to 'QScriptEngine::newQObject(QTextCursor*)'

Просто QTextEdit могу для скрипта сделать видимым, а вот QTextCursor не выходит. Как побороть?


Название: Re: QTextCursor и QScriptEngine
Отправлено: Rcus от Октябрь 24, 2008, 13:32
QTextCursor не является потомком QObject, поэтому напрямую привязать его к скрипту нельзя, придется писать обертку.


Название: Re: QTextCursor и QScriptEngine
Отправлено: SABROG от Январь 15, 2009, 15:41
А так нельзя ?

Код:
     Q_DECLARE_METATYPE(QVector<int>)

     ...

     qScriptRegisterSequenceMetaType<QVector<int> >(engine);
     ...
     QVector<int> v = qscriptvalue_cast<QVector<int> >(engine->evaluate("[5, 1, 3, 2]"));
     qSort(v.begin(), v.end());
     QScriptValue a = engine->toScriptValue(v);
     qDebug() << a.toString(); // outputs "[1, 2, 3, 5]"


Название: Re: QTextCursor и QScriptEngine
Отправлено: Rcus от Январь 15, 2009, 15:52
эээ... А как это относится к предоставлению интерфейса для взаимодействия содержимого скрипта и объекта типа QTextCursor?


Название: Re: QTextCursor и QScriptEngine
Отправлено: SABROG от Январь 15, 2009, 16:29
Сделать как в QtScript Tetrix Example, передать указатель на класс в скрипт

Код
C++ (Qt)
Q_DECLARE_METATYPE(QPainter*)
 

А потом в скрипте его использовать

Код
C++ (Qt)
TetrixBoard.prototype.onPaint = function(painter) {
    if (this.isPaused) {
        this.ui.drawPauseScreen(painter);
        return;
    }
 
    for (var i = 0; i < TetrixBoard.BoardHeight; ++i) {
        for (var j = 0; j < TetrixBoard.BoardWidth; ++j) {
            var shape = this.getShapeAt(j, TetrixBoard.BoardHeight - i - 1);
            if (shape != TetrixShape.NoShape)
                this.ui.drawSquare(painter, j, i, shape);
        }
    }
 
    if (this.curPiece.shape != TetrixShape.NoShape) {
        for (var i = 0; i < 4; ++i) {
            var x = this.curX + this.curPiece.getX(i);
            var y = this.curY - this.curPiece.getY(i);
            this.ui.drawSquare(painter, x, TetrixBoard.BoardHeight - y - 1,
                               this.curPiece.shape);
        }
    }
}
 

Прописать свои методы.

Конечно наследование от QObject'а поинтереснее.