当前位置: 首页 > news >正文

合肥 网站建设网站搜什么关键词好

合肥 网站建设,网站搜什么关键词好,微信公众号小说代理和网站结合怎么做,手机qq网页版登录目录 1 QML获取C的变量值 2 QML获取C创建的自定义对象 3 QML发送信号绑定C端的槽 4 C端发送信号绑定qml端槽 5 C调用QML端函数 1 QML获取C的变量值 QQmlApplicationEngine engine; 全局对象 上下文属性 QQmlApplicationEngine engine; QQmlContext *context1 engine.…

目录

1 QML获取C++的变量值

2 QML获取C++创建的自定义对象

3 QML发送信号绑定C++端的槽

4 C++端发送信号绑定qml端槽

5 C++调用QML端函数


1 QML获取C++的变量值
QQmlApplicationEngine engine;

全局对象

上下文属性

QQmlApplicationEngine engine;
QQmlContext *context1 = engine.rootContext();
context1->setContextProperty("test",200);

在qml中可全局直接使用test 

2 QML获取C++创建的自定义对象

光标放在成员变量m_iValue和m_sString后面 Alt + Enter 选择第一个可自动生成函数

int m_iValue;
QString m_sString;

myobject.h

#ifndef MYOBJECT_H
#define MYOBJECT_H#include <QObject>class MyObject : public QObject
{Q_OBJECT
public:explicit MyObject(QObject *parent = nullptr);int iValue() const;void setIValue(int newIValue);const QString &sString() const;void setSString(const QString &newSString);signals:void iValueChanged();void sStringChanged();private:int m_iValue;QString m_sString;Q_PROPERTY(int iValue READ iValue WRITE setIValue NOTIFY iValueChanged)Q_PROPERTY(QString sString READ sString WRITE setSString NOTIFY sStringChanged)
};#endif // MYOBJECT_H

myobject.c

#include "myobject.h"MyObject::MyObject(QObject *parent): QObject{parent}
{}int MyObject::iValue() const
{return m_iValue;
}void MyObject::setIValue(int newIValue)
{if (m_iValue == newIValue)return;m_iValue = newIValue;emit iValueChanged();
}const QString &MyObject::sString() const
{return m_sString;
}void MyObject::setSString(const QString &newSString)
{if (m_sString == newSString)return;m_sString = newSString;emit sStringChanged();
}

mian.c

注册main.qml 中 import testObj 1.0使用

qmlRegisterType<MyObject>("testObj",1,0,"MyObject");

main.qml

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.5
import testObj 1.0
Window {width: 640height: 480visible: truetitle: qsTr("Hello World")MyObject {iValue: 20sString: "test"}}

使用c++端的函数时需要在函数前面加上 Q_INVOKABLE

比如 Q_INVOKABLE void myFunction();

3 QML发送信号绑定C++端的槽

在mian.c先注册 qmlRegisterType<MyObject>("testObj",1,0,"MyObject");

C++ 写一个公有槽 

public slots:
    void qml_slot(QString str);

qml端通过按钮发送信号

signal qml_signal(string str)
    Button {
        onClicked: {
            qml_signal("qml send signal test");
        }
    }

绑定信号和槽函数

Component.onCompleted: {
        qml_signal.connect(myobj.qml_slot)
    }

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.5
import testObj 1.0
Window {id: windowwidth: 640height: 480visible: truetitle: qsTr("Hello World")MyObject {id: myobjiValue: 20sString: "test"}signal qml_signal(string str)Button {onClicked: {qml_signal("qml send signal test");}}//方法一
//    Connections {
//        target: window
//        function onQml_signal(str){
//            myobj.qml_slot(str)
//        }
//    }//方法二Component.onCompleted: {qml_signal.connect(myobj.qml_slot)}//方法三 mian.c 中engine load后//auto obj_list = engine.rootObjects();//auto window = list.first();//connect(window,SIGNAL(qml_signal(QString)),your function ptr,SLOT(qml_slot(QString)));}
4 C++端发送信号绑定qml端槽

myobject.h

信号 void signal_Cpp(QString str); 通过函数

Q_INVOKABLE void myFunction();发送
#ifndef MYOBJECT_H
#define MYOBJECT_H#include <QObject>class MyObject : public QObject
{Q_OBJECT
public:explicit MyObject(QObject *parent = nullptr);int iValue() const;void setIValue(int newIValue);const QString &sString() const;void setSString(const QString &newSString);Q_INVOKABLE void myFunction();static MyObject* getInstance();
public slots:void qml_slot(QString str);
signals:void iValueChanged();void sStringChanged();void signal_Cpp(QString str);
private:int m_iValue;QString m_sString;Q_PROPERTY(int iValue READ iValue WRITE setIValue NOTIFY iValueChanged)Q_PROPERTY(QString sString READ sString WRITE setSString NOTIFY sStringChanged)
};#endif // MYOBJECT_H

myobject.c

#include "myobject.h"
#include <QDebug>
MyObject::MyObject(QObject *parent): QObject{parent}
{}int MyObject::iValue() const
{return m_iValue;
}void MyObject::setIValue(int newIValue)
{if (m_iValue == newIValue)return;m_iValue = newIValue;emit iValueChanged();
}const QString &MyObject::sString() const
{return m_sString;
}void MyObject::setSString(const QString &newSString)
{if (m_sString == newSString)return;m_sString = newSString;emit sStringChanged();
}void MyObject::myFunction()
{emit signal_Cpp("signal_Cpp myFunction!");
}MyObject *MyObject::getInstance()
{static MyObject* obj = new MyObject();return obj;
}void MyObject::qml_slot(QString str)
{qDebug()<<"qml_slot"<<str;
}

mian.c

注册单例类

qmlRegisterSingletonInstance("testObj",1,0,"MyObject",MyObject::getInstance());
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QtQml/qqml.h>
#include "myobject.h"int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endifQGuiApplication app(argc, argv);QQmlApplicationEngine engine;QQmlContext *context1 = engine.rootContext();context1->setContextProperty("test",200);//qmlRegisterType<MyObject>("testObj",1,0,"MyObject");qmlRegisterSingletonInstance("testObj",1,0,"MyObject",MyObject::getInstance());const QUrl url(QStringLiteral("qrc:/main.qml"));QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,&app, [url](QObject *obj, const QUrl &objUrl) {if (!obj && url == objUrl)QCoreApplication::exit(-1);}, Qt::QueuedConnection);engine.load(url);return app.exec();
}

main.qml

C++端发送信号

Button {
        onClicked: {
            //C++发送信号
            MyObject.myFunction()
        }
    }

连接QML端槽函数

Connections {
        target: MyObject
        function onSignal_Cpp(str) {
            //qml槽函数
            qmlSolt(str)
        }
    }

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.5
import testObj 1.0
Window {id: windowwidth: 640height: 480visible: truetitle: qsTr("Hello World")//    MyObject {
//        id: myobj
//        iValue: 20
//        sString: "test"//    }function qmlSolt(str) {console.log(str)}signal qml_signal(string str)Button {onClicked: {//C++发送信号MyObject.myFunction()}}Connections {target: MyObjectfunction onSignal_Cpp(str) {//qml槽函数qmlSolt(str)}}}
5 C++调用QML端函数

//main.c  load后获取qml对象
    auto obj_list = engine.rootObjects();
    auto window = obj_list.first();

 //调用QML函数
    QMetaObject::invokeMethod(window,"qmlFunction",
                              Q_RETURN_ARG(QVariant,res),
                              Q_ARG(QVariant,arg1),
                              Q_ARG(QVariant,arg2)
                              );

mian.qml

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.5
import testObj 1.0
Window {id: windowwidth: 640height: 480visible: truetitle: qsTr("Hello World")function qmlFunction(arg1,arg2) {return arg1 + arg2;}}

mian.c

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QtQml/qqml.h>
#include "myobject.h"int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endifQGuiApplication app(argc, argv);QQmlApplicationEngine engine;QQmlContext *context1 = engine.rootContext();context1->setContextProperty("test",200);qmlRegisterType<MyObject>("testObj",1,0,"MyObject");//qmlRegisterSingletonInstance("testObj",1,0,"MyObject",MyObject::getInstance());const QUrl url(QStringLiteral("qrc:/main.qml"));QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,&app, [url](QObject *obj, const QUrl &objUrl) {if (!obj && url == objUrl)QCoreApplication::exit(-1);}, Qt::QueuedConnection);engine.load(url);//获取qml对象auto obj_list = engine.rootObjects();auto window = obj_list.first();QVariant res;QVariant arg1 = "arg1";QVariant arg2 = "arg2";//调用QML函数QMetaObject::invokeMethod(window,"qmlFunction",Q_RETURN_ARG(QVariant,res),Q_ARG(QVariant,arg1),Q_ARG(QVariant,arg2));qDebug()<<res;return app.exec();
}

http://www.ritt.cn/news/25617.html

相关文章:

  • 义乌做网站的公司有哪些百度关键词推广怎么收费
  • 网站建设怎么制作网站软文推广发布平台
  • 网站排名方法怎么做属于自己的网站
  • 湛江专业官网建站台州关键词优化平台
  • 简述设计优秀电子商务网站的成功要素网站软件下载
  • 乌鲁木齐做网站公司哪家好些外链下载
  • 有哪些免费做电子名片的网站石家庄关键词优化平台
  • 苏州做网站套路骗什么是软文营销?
  • 昌平上门做网站那代写文章接单平台
  • wordpress更改数据库密码网站推广优化之八大方法
  • 当下 如何做网站赚钱深圳搜索排名优化
  • wordpress wechat payseo咨询顾问
  • 设计公司调研报告云速seo百度点击
  • 学计算机的做网站的叫什么工作作品推广
  • 网站开发 js互联网营销是什么意思
  • 模板网站如何大量复制上线市场调研方案怎么写
  • 制作自己的网站学校外贸seo优化公司
  • 网站免费软件推荐网络公司优化关键词
  • 测量为什么要建站互联网营销策划是做什么的
  • 有api对接文档怎么做网站aso推广平台
  • 如何获取所有网站福州seo按天收费
  • 做微网站的第三方武汉网站seo
  • 做电气的什么招聘网站好商丘seo外包
  • 哪个网站有淘宝做图的素材站优云seo优化
  • 微信公众号开发网站开发点金推广优化公司
  • 河南火焰山网站开发禹最权威的品牌排行榜网站
  • 做国际网站有什么需要注意的最近一周新闻热点大事件
  • 黔南服务好的高端网站设计公司打开百度浏览器
  • 可以制作什么网站爱用建站
  • wordpress初始密码seo网站页面优化包含