QML中调用qt类中的信号 槽 成员函数和属性

本文介绍了如何在QML中调用Qt类中的信号、槽、成员函数和属性。通过示例代码展示了在C++类`LS`中定义信号和槽,然后在QML文件中进行绑定和触发,实现QML与C++的交互。QMLtest.qml中,当鼠标点击矩形时,会改变Text的文本并触发C++中的信号,进而调用槽函数。

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

// main.cpp
 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     QDeclarativeView view;
     view.rootContext()->setContextProperty("ls",new LS);
     view.setSource(QUrl::fromLocalFile("../QMLAPP/QMLtest.qml"));
     view.show();
     return app.exec();
 }
// LS.h
#ifndef LS_H
#define LS_H
#include <QObject>
#include <QColor>
class LS : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QColor color READ getColor WRITE setColor NOTIFY colorChange)
public:
    LS(QObject *parent = 0);
    ~LS();
    // Q_INVOKABLE 用于导出函数,让qml能使用
    Q_INVOKABLE QString getText(void) const;
    // 用于属性
    QColor getColor(void) const;
    void setColor(const QColor &c);
signals:
    void sendMsg(const QString &s);
    // 用于属性
    void colorChange(void);
public slots:
    void echoMsg(const QString &s);
private:
    QString m_str;
    QColor m_Color;
};
#endif // LS_H

//LS.cpp
#include "LS.h"
    LS::LS(QObject *parent)
        :QObject(parent),m_str("I am LS class"),m_Color(Qt::blue)
    {
        QObject::connect(this, SIGNAL(sendMsg(QString)), this, SLOT(echoMsg(QString)));
    }
    LS::~LS(){}
    QString LS::getText(void) const
    {
        return m_str;
    }
    // 用于属性
    QColor LS::getColor(void) const
    {
        return m_Color;
    }
    void LS::setColor(const QColor &c)
    {
        m_Color = c;
    }
    void LS::echoMsg(const QString &s)
    {
        qDebug(" %s ", s.toLocal8Bit().data());
    }
//----------------------------------------------------------------------
// QMLtest.qml
Rectangle{
    id: mainrect
    width: 400; height: 300;
    color: ls.color;
    Text {
        id: tls;
        text: "click this"
    }

    MouseArea{
        anchors.fill: parent;
        onClicked: {
           tls.text = ls.getText();
           ls.sendMsg(" ok ");
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值