我使用QtQuick应用程序设计了基本UI和一些按钮,textareas。我需要用C ++编写事件处理程序来处理按钮单击等事件。如何从C ++文件中访问qml元素?
答案 0 :(得分:1)
从C ++访问QML元素不是一个好习惯。我会用一个简单的例子向你展示一个更受青睐的方法。
[或者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";
}
[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();
}
[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();
}
}
}
我希望这会有所帮助。