crossplatform.ru

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

 
Тема закрытаНачать новую тему
> Вызов функции объекта из скрипта, qtscriptgenerator, js, script
Snake174
  опции профиля:
сообщение 17.7.2013, 12:44
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 18.4.2011
Из: Миасс
Пользователь №: 2613

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




Репутация:   0  


Всем привет.

В скрипте создаю наследника от QGraphicsItem:
function tr(s)
{
  return s;
}

function Trace( parent )
{
  QGraphicsItem.call( this, parent );

  this.setData( 0, 1000 );
  this.setData( 1, 0 );
  this.setData( 2, tr("След на нижней части чашки затвора") );
  this.setFlag( QGraphicsItem.ItemIsSelectable );
  this.normalPen = new QPen( new QColor( 0, 0, 0, 255 ), 2 );
  this.selectedPen = new QPen( new QColor( 0, 0, 255, 150 ), 2 );

  Qt.Scene.addItem( this );
}

Trace.prototype = new QGraphicsItem();

Trace.prototype.boundingRect = function()
{
  return new QRectF( 0, 0, 50, 25 );
}

Trace.prototype.paint = function( painter, styleOptionGraphicsItem, widget )
{
  if (this.isSelected())
    painter.setPen( this.selectedPen );
  else
    painter.setPen( this.normalPen );

  painter.drawArc( 0, 0, 50, 50, 2750, -2600 );
}

Trace.prototype.type = function()
{
  return UserType + 1;
}

Trace.prototype.mouseMove = function( angle, x, y )
{
  if (this.isSelected())
    this.setRotation( -angle - 90 );
}

function addTrace()
{
  var z = new Trace( Qt.Scene );
  z.setPos( 275, 525 );
  z.setTransformOriginPoint( z.mapFromParent( 300, 460 ) );
}

function getInfo()
{
  return tr("След на нижней части чашки затвора");
}

function getData()
{
  return 0;
}


Добавил ему свою функцию:
Trace.prototype.mouseMove = function( angle, x, y )
{
  if (this.isSelected())
    this.setRotation( -angle - 90 );
}


В основной программе пытаюсь вызвать её:
void GraphicsScene::mouseMoveEvent( QGraphicsSceneMouseEvent *e )
{
  engine->evaluate( QString("mouseMove(%1,%2,%3)").arg( angle ).arg( e->scenePos().x() ).arg( e->scenePos().y() ),  "trace0.js" );
}


Но ничего не происходит. QGraphicsItem должен перемещаться.

Как правильно вызывать вручную созданные функции?
Можно ли как-нибудь узнать класс созданного в скрипте объекта (Trace в данном случае)?

Если можно, то было бы гораздо удобнее в основной программе написать так:
void GraphicsScene::mouseMoveEvent( QGraphicsSceneMouseEvent *e )
{
  Trace *it = (Trace *)getCurrent();
  it->mouseMove(...);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 22.10.2019, 7:16