Я вот частично решил данную проблему, добавлением еще одного класса.
Теперь это выглядит примерно так:
// interfaceqml.h
class InterfaceQML : public QObject {
Q_OBJECT
public:
InterfaceQML(QObject *parent = 0);
QTimer *timer;
signals:
void newSignal();
public slots:
void newSlot();
};
// interfaceqml.cpp
InterfaceQML::InterfaceQML(QObject *parent) : QObject(parent) {
timer = new QTimer;
connect(timer, SIGNAL(timeout()), this, SLOT(newSlot()));
timer->start(500);
}
void InterfaceQML::newSlot() {
emit newSignal();
}
// mainwindow.h
class MainWindow : public QObject {
Q_OBJECT
public:
MainWindow(QObject *parent = 0);
InterfaceQML *interface;
QQuickView *view;
};
// mainwindow.cpp
MainWindow::MainWindow(QObject *parent) : QObject(parent) {
view = new QQuickView;
qmlRegisterType<InterfaceQML>("Interface", 1, 0, "Interface");
view->setSource(QUrl("file:/main.qml"));
view->show();
}
// main.qml
import QtQuick 2.0
import Interface 1.0
Rectangle {
width: 500
height: 500
color: "#748596"
signal sgSignal()
Text {
id: text
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
text: "World"
font.bold: true
font.pointSize: 30
color: "red"
}
Interface {
onNewSignal: {
text.text = "Hello World"
}
}
}
теперь по таймеру посылается сигнал в QML.
Но мне надо довать каманду на отсылку сигнала, как то из вне.
Тоесть можно отсылать сигнал по тому же таймеру, только из класса MainWindow. Примерно так
MainWindow::MainWindow(QObject *parent) : QObject(parent) {
interface = new InterfaceQML;
timer = new QTimer;
view = new QQuickView;
qmlRegisterType<InterfaceQML>("Interface", 1, 0, "Interface");
view->setSource(QUrl("file:/main.qml"));
view->show();
QObject *pObject = view->rootObject();
connect(timer, SIGNAL(timeout()), interface, SLOT(newSlot()));
timer->start(500);
}
Вот так уже сигнал до QML не доходит(( Как это можно исправить?