Всем привет.
В скрипте создаю наследника от 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(...);
}