Tôi đang cố gắng tạo một chương trình nhỏ với Qt. Tôi có một main.cpp
với đoạn mã sau:Truy cập chức năng C++ từ 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;
}
và tôi có một tập tin .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();
}
}
}
Bây giờ, khi tôi bấm vào MouseArea
, chương trình bỏ. Điều tôi muốn là nó gọi hàm reken_tijden_uit
trong tệp main.cpp
.
Tôi đã googled rất nhiều và tìm kiếm trên trang web này. Tôi đã tìm thấy một vài câu trả lời, nhưng tôi đã không nhận được một câu trả lời.
Vì vậy, tôi nên đặt mã nào để tôi có thể gọi hàm reken_tijden_uit
bằng C++?
Xin cảm ơn trước.
File header trông như thế này:
#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();
}
và file 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()
}
}
}
Và các lỗi như sau:
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
Vì vậy, tôi đã làm gì sai?
hãy kiểm tra các chủ đề sau đây có thể giúp bạn http: // stackoverflow.com/questions/5709820/communication-between-c-and-qml – shofee
hy, tôi đã kiểm tra nó, nhưng nó không phải là precisly những gì tôi muốn ... tôi muốn thêm một sự kiện onclick để mousearea các cuộc gọi chức năng cpp. (trong javascript là nó chỉ reken_tijden_uit(), vì vậy làm thế nào nó hoạt động trong c + + và qml ... – Mathlight