自定义C++类与Rectangle类一样在Qml中使用

本文介绍了一个使用QML和C++进行信号槽机制交互的简单示例。通过Person类定义了两个属性:rpm和dateTime,并实现了属性变化时的响应机制。QML文件中定时更新rpm属性值,C++端接收并处理这些变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写了一个很简单的例子,来模仿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;
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值