我用一些按鈕設計了基本的用戶界面,textareas使用QtQuick應用程序。我需要用C++編寫事件處理程序來處理按鈕單擊事件。我如何從C++文件訪問qml元素?[已解決]來自C++類的qtquick應用程序事件處理
0
A
回答
1
從C++訪問QML元素不是一個好習慣。我將以一個簡單的例子向你展示一種更受青睞的方法。
- 寫一個繼承自QObject C++類(該類將實現你想要當事件發生時調用的方法) (EG)
[或者Controller.h]
#ifndef CONTROLLER_H
#define CONTROLLER_H
#include <QObject>
class Controller : public QObject
{
Q_OBJECT
public:
explicit Controller(QObject *parent = 0);
Q_INVOKABLE void onItemClicked();
};
#endif // CONTROLLER_H
[controller.cpp]
#include "controller.h"
#include <QDebug>
Controller::Controller(QObject *parent) : QObject(parent)
{
}
void Controller::onItemClicked()
{
qDebug() << "The item was clicked";
}
- 創建該類的一個實例,並將其設置爲運行QML UI的QQmlEngine中的上下文屬性。遵循Qt Quick應用程序的典型「main.cpp」。
[main.cpp中]
#include <QtGui/QGuiApplication>
#include <QQmlEngine>
#include <QQmlContext>
#include "qtquick2applicationviewer.h"
#include "controller.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
Controller c;
viewer.engine()->rootContext()->setContextProperty("Controller", &c);
viewer.setMainQmlFile(QStringLiteral("qml/quicktest/main.qml"));
viewer.showExpanded();
return app.exec();
}
- 現在可以自由地調用從QML代碼的方法(或多個)。
[main.qml]
import QtQuick 2.0
Rectangle {
width: 360
height: 360
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
onClicked: {
Controller.onItemClicked();
}
}
}
我希望這有助於。
+0
它的工作原理..非常感謝.. !! –
+0
你歡迎,@尼克希爾帕蒂爾! – mhcuervo
相關問題
- 1. 解決在JavaScript事件處理程序
- 2. C#自定義事件處理程序
- 3. C++設計事件處理程序類
- 4. C#telnet應用程序的單線程事件處理程序
- 5. C#事件處理程序
- 6. 統一解決通用的事件處理程序
- 7. (已解決)用批處理程序編譯Jar文件
- 8. 處理來自繼承類的事件
- 9. C#事件和事件處理程序
- 10. 處理來自COM的事件時「無法添加事件處理程序」
- 11. Tridion工作流程自動決策的事件處理程序
- 12. 處理應用程序的事件已關閉(Ionic)
- 13. 計劃事件事件處理程序來自覆蓋
- 14. c#使用事件處理程序WorkbookOpen
- 15. GUI應用程序中的事件處理線程C++
- 16. 瞭解Backbone.js的事件處理程序
- 17. 使用來自事件處理程序的良率
- 18. 來自JQuery的函數調用事件處理程序
- 19. 添加自己的事件處理程序在其他事件處理程序
- 20. C#事件處理 - 事件處理程序保留爲空
- 21. 處理應用程序事件
- 22. 類似於PHP中C#事件處理程序的事情
- 23. C#,事件處理程序和線程
- 24. 確定來自事件處理程序的發件人對象
- 25. 如何解決C#中的系統事件處理程序錯誤?
- 26. C#MonoDroid的事件處理程序
- 27. VB.NET事件處理程序的C#
- 28. C#WinForm的事件處理程序
- 29. C#插件和事件處理程序
- 30. C#事件處理單線程應用程序
可能的重複http://stackoverflow.com/questions/21437841/how-to-connect-a-qt-quick-button-click-to-ac-method/21438337#21438337 –
我試過了.. 「main.obj:-1:error:LNK2019:無法解析的外部符號」public:__cdecl SomeClass :: SomeClass(class QObject *)「(?? 0SomeClass @@ QEAA @ PEAVQObject @@@ Z )在函數main中引用「 –
您是否將SomeClass的.h和.cpp文件添加到您的項目中,並且.cpp文件包含SomeClass :: SomeClass(QObject *)的實現? –