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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTextCursor и QScriptEngine  (Прочитано 7968 раз)
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 не выходит. Как побороть?
Записан
Rcus
Гость
« Ответ #1 : Октябрь 24, 2008, 13:32 »

QTextCursor не является потомком QObject, поэтому напрямую привязать его к скрипту нельзя, придется писать обертку.
Записан
SABROG
Гость
« Ответ #2 : Январь 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]"
Записан
Rcus
Гость
« Ответ #3 : Январь 15, 2009, 15:52 »

эээ... А как это относится к предоставлению интерфейса для взаимодействия содержимого скрипта и объекта типа QTextCursor?
Записан
SABROG
Гость
« Ответ #4 : Январь 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'а поинтереснее.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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