这里写了一个很简单的例子,来模仿Rectangle{}在qml书写格式.
Person{
id:people
rpm:rpmValue
}
我们只要改变rpm的值,C++端就能响应改变的rpm值.
person.h:
#ifndef PEOPLE_H
#define PEOPLE_H
#include<QObject>
class Person:public QObject
{
Q_OBJECT
Q_PROPERTY(uint rpm MEMBER m_rpm NOTIFY rpmChanged)
Q_PROPERTY(uint dateTime MEMBER m_dateTime NOTIFY dateTimeChanged)
public:
explicit Person(QObject*parent=0);
private:
uint16_t m_rpm;
uint16_t m_dateTime;
signals:
void rpmChanged();
void dateTimeChanged();
public slots:
void rpm_slot();
};
#endif // PEOPLE_H
main.cpp:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlEngine>
#include <QtQml>
#include<person.h>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<Person>("People",1,0,"Person");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
person.cpp:
#include "person.h"
#include<QDebug>
Person::Person(QObject*parent):
QObject(parent)
{
m_rpm = 1000;
qDebug()<<m_rpm<<endl;
connect(this,SIGNAL(rpmChanged()),this,SLOT(rpm_slot()));
}
void Person::rpm_slot()
{
qDebug()<<m_rpm<<endl;
}
main.qml:
import QtQuick 2.3
import QtQuick.Window 2.2
import People 1.0
Window {
visible: true
property int rpmValue: 0
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
Person{
id:people
rpm:rpmValue
}
Timer{
running: true
repeat: true
interval: 1000
onTriggered: {
rpmValue +=10;
}
}
}
本文介绍了一个使用QML和C++进行信号槽机制交互的简单示例。通过Person类定义了两个属性:rpm和dateTime,并实现了属性变化时的响应机制。QML文件中定时更新rpm属性值,C++端接收并处理这些变化。

被折叠的 条评论
为什么被折叠?



