Estoy tratando de hacer un pequeño programa con Qt. Tengo un main.cpp
con el siguiente código:Accede a la función C++ desde QML
#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QScopedPointer<QApplication> app(createApplication(argc, argv));
QmlApplicationViewer viewer;
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
viewer.setMainQmlFile(QLatin1String("qml/tw_looptijden_berekenen/main.qml"));
viewer.showExpanded();
return app->exec();
}
int reken_tijden_uit(){
return true;
}
y tengo un archivo .qml
:
import QtQuick 1.1
Rectangle {
width: 360
height: 360
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
}
Ahora, cuando hago clic en el MouseArea
, el programa se cierra. Lo que quiero es que llame a la función reken_tijden_uit
en el archivo main.cpp
.
He buscado mucho en Google y he buscado en este sitio. Encontré un par de respuestas, pero no funcionó.
¿Qué código pongo donde puedo llamar a la función reken_tijden_uit
en C++?
Gracias de antemano.
El archivo de cabecera es el siguiente:
#ifndef EIGEN_FUNCTION_HEADER_H
#define EIGEN_FUNCTION_HEADER_H
class MyObject : public QObject{
Q_OBJECT
public:
explicit MyObject (QObject* parent = 0) : QObject(parent) {}
Q_INVOKABLE int reken_tijden_uit(){
return 1;
}
};
#endif // EIGEN_FUNCTION_HEADER_H
main.cpp
:
#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"
#include "eigen_function_header.h"
QScopedPointer<QApplication> app(createApplication(argc, argv));
qmlRegisterType<MyObject>("com.myself", 1, 0, "MyObject");
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QScopedPointer<QApplication> app(createApplication(argc, argv));
QmlApplicationViewer viewer;
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
viewer.setMainQmlFile(QLatin1String("qml/tw_looptijden_berekenen/main.qml"));
viewer.showExpanded();
return app->exec();
}
y el archivo QML:
import QtQuick 1.1
import com.myself 1.0
Rectangle {
width: 360
height: 360
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
MyObject {
id: myobject
}
MouseArea {
anchors.fill: parent
onClicked: {
myobject.reken_tijden_uit()
}
}
}
Y los errores son los siguientes:
D:\*\main.cpp:6: error: 'argc' was not declared in this scope
D:\*\main.cpp:6: error: 'argv' was not declared in this scope
D:\*\main.cpp:8: error: expected constructor, destructor, or type conversion before '<' token
¿Qué hice mal?
favor, compruebe el siguiente hilo de este que te pueden ayudar a http: // stackoverflow.com/questions/5709820/communication-between-c-and-qml – shofee
hy lo he comprobado, pero no es exactamente lo que quiero ... quiero agregar un evento onclick al mousearea que llama a la función cpp. (en javascript es solo reken_tijden_uit(); entonces, ¿cómo funciona en C++ y qml ... – Mathlight