QML与C++中信号和槽的使用

xiaoxiao2021-02-27  217

信号与槽

//Gemini.h class Gemini:public Q_Object{ Q_OBJECT signals: void begin() public slots: void doSomething(){ qDebug()<<"Gemini ::doSomething() called"; } }

Gemini类中的信号begin()和槽doSomething()都可被QML访问。槽必须声明为public或protected。 在C++中使用时候需要emit关键字,但是在QML中就是普通函数,用法跟函数一样,信号处理器形式为onSignal。信号不支持重载。

//main.cpp #include<QGuiApplication> #include<QQmlApplicationEngine> #include<QtQml> #include "Gemini.h" int main(int argc,char *argv){ QGuiAppliction app(argc,argv); qmlRegisterType<Gemini>("Union.Lotto.Gemini",1,0,"Gemini"); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:///main.qml))); return app.exec(); }

//main.qml

import Union.Lotto.Gemini 1.0 Window { visible:true width:360;height:360; title:"Union Lotto Game" color:'white' MouseArea{ anchors.fill:parent; onclicked:{ gemini.begin() } } Gemini { id:gemini; //begin就是Gemini类中的信号,doSomething就是Gemini的槽 onBegin:doSomething(); } } 在qmlRegisterType()中, 其中尖括号放的是类名称@param1:在qml中唯一标识一个类,使用import的url@param2:主版本@param3:次版本@param4:在qml中使用的模块代表这个类
转载请注明原文地址: https://www.6miu.com/read-16217.html

最新回复(0)