Есть сигнал, который оповещает об изменении значения координаты X. Qml файл при каждом таком изменении в обработчике
onFirst_ball_xChanged должен изменить значение координаты элемента с
id: ball (этот элемент на самом деле Rectangle), однако я получаю ошибку Получаю ошибку:
ReferenceError: Can't find variable: first_ball_X_value, не могу понять, зачем Qml не видит эту переменную, также сам обработчик
onFirst_ball_xChanged при подстановке туда видимых элементов вызывается только один раз, буду рад, если кто-нибудь объяснит, или подтолкнёт меня к правильному пути.
Ниже привожу куски кода из файлов
ball.h, ball.cpp, main,qmlC++ (Qt)
#include <QDeclarativeItem>
class ball : public QDeclarativeItem
{
Q_OBJECT
int first_ball_X;
Q_PROPERTY(int first_ball_x READ get_first_ball_x WRITE set_first_ball_x
NOTIFY first_ball_xChanged)
public:
explicit ball(QDeclarativeItem *parent = 0);
const int& get_first_ball_x() const;
void set_first_ball_x(const int);
protected:
void timerEvent(QTimerEvent *);
signals:
void first_ball_xChanged(int first_ball_X_value);
};
C++ (Qt)
void ball::timerEvent(QTimerEvent *te)
{
static int ready = 1;
if (ready >= 100)
{
killTimer(te->timerId());
qDebug() << "Stop ball rolling";
emit readyDone();
}
else
{
ready++;
first_ball_X = first_ball_X - (2 * shift_X / ready);
int first_ball_X_value = first_ball_X;
emit first_ball_xChanged(first_ball_X_value);
}
}
Javascript
Ball
{
anchors.fill: parent
id: ball_main
MouseArea
{
anchors.fill: parent
onClicked:
{
ball_main.shift_x = mouseX - ball_1.x - ball_1.width/2 // center of ball on Ox
ball_main.shift_y = mouseY - ball_1.y - ball_1.height/2 // center of ball on Oy
onFirst_ball_xChanged: ball_1.x = first_ball_X_value;
}
}
}