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

大连网站设计布局浏览器观看b站视频的最佳设置

大连网站设计布局,浏览器观看b站视频的最佳设置,如何上传自己的视频做网站,外贸公司用的采购储运财务软件QML 与 C 的交互是 Qt Quick 开发的核心需求,常用于将界面逻辑与底层业务逻辑解耦。 一、基础交互原理 ‌核心机制‌:通过 Qt 元对象系统(Meta-Object System)实现 QML 与 C 的双向通信,依赖信号槽(Signa…

QML 与 C++ 的交互是 Qt Quick 开发的核心需求,常用于将界面逻辑与底层业务逻辑解耦。

一、基础交互原理

  • 核心机制‌:通过 Qt 元对象系统(Meta-Object System)实现 QML 与 C++ 的双向通信,依赖信号槽(Signals & Slots)和属性绑定(Property Binding)‌。
    注册方式:qml中setContextProperty、qt c++中qmlRegisterType
        QQmlApplicationEngine engine;MyObject myObject;engine.rootContext()->setContextProperty("myObject", &myObject);
    qmlRegisterType<MyObject>("MyObjectLib", 1, 0, "MyObject");
  • 数据类型映射‌:QML 自动转换基础类型(如 intQString),复杂类型需注册为元类型(如 QJsonObject)‌。

二、常见交互方式 

1、暴露 C++ 对象到 QML 上下文。

cpp

// C++ 类
class DataManager : public QObject {Q_OBJECT
public:Q_INVOKABLE void saveData(const QString &content); 
};// 主函数中注册
int main() {QGuiApplication app(argc, argv);QQmlApplicationEngine engine;DataManager manager;engine.rootContext()->setContextProperty("dataManager", &manager); // 关键步骤engine.load(QUrl("qrc:/main.qml"));return app.exec();
}

qml

// QML 调用
Button {onClicked: dataManager.saveData("Hello QML!")
}
2、注册 C++ 类为 QML 类型。

cpp

// 定义可导出的 C++ 类
class Calculator : public QObject {Q_OBJECTQ_PROPERTY(int result READ result NOTIFY resultChanged) // 属性暴露
public:Q_INVOKABLE int add(int a, int b) { return a + b; }
signals:void resultChanged();
private:int result;
};// 在 main.cpp 注册
qmlRegisterType<Calculator>("MyLib", 1, 0, "Calculator");

qml

// QML 中使用
import MyLib 1.0Calculator {id: calconResultChanged: console.log("New result:", result)
}Button {onClicked: calc.result = calc.add(10, 20)
}
3、使用 QJSValue 传递函数,异步回调。

cpp

class CallbackHandler : public QObject {Q_OBJECT
public:Q_INVOKABLE void registerCallback(QJSValue func) {m_callback = func;}void trigger() {if (m_callback.isCallable()) m_callback.call();}
private:QJSValue m_callback;
};

qml

// QML 传递回调函数
CallbackHandler {id: handlerComponent.onCompleted: handler.registerCallback(() => console.log("Called!"))
}
4、通过 Q_PROPERTY 实现属性绑定,自动同步 C++ 与 QML 的数值变化。

cpp

class Settings : public QObject {Q_OBJECTQ_PROPERTY(bool darkMode READ darkMode WRITE setDarkMode NOTIFY darkModeChanged)
public:bool darkMode() const { return m_darkMode; }void setDarkMode(bool enabled) { if (m_darkMode != enabled) {m_darkMode = enabled;emit darkModeChanged();}}
signals:void darkModeChanged();
private:bool m_darkMode = false;
};

 qml

// QML 双向绑定
Switch {checked: settings.darkModeonCheckedChanged: settings.darkMode = checked
}

三、实例

1、实例(qml中setContextProperty注册方式)

1)、创建一个空的Qt Quick程序。创建后,基本目录结构如下:

2)、打开main.cpp,进行修改。

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QObject>
#include <QDebug>class MyObject : public QObject
{Q_OBJECTQ_PROPERTY(QString message READ message WRITE setMessage NOTIFY messageChanged)
public:QString message() const {return m_message;}void setMessage(const QString& qMsg){m_message = qMsg;}public slots:void sayHello() {m_message = "Hello from C++!";qDebug() << m_message; // 终端中打印emit messageChanged();}signals:void messageChanged();private:QString m_message="hello init";
};int main(int argc, char *argv[])
{QGuiApplication app(argc, argv);QQmlApplicationEngine engine;MyObject myObject;engine.rootContext()->setContextProperty("myObject", &myObject);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();
}#include "main.moc"

3)、打开main.qml,进行修改。

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2ApplicationWindow {visible: truewidth: 400height: 300title: "QML and C++ Interaction"Button {text: "Click Me"onClicked: {myObject.sayHello(); // 调用C++对象的函数console.log("调用C++对象的函数\n");}}Label {id: label1visible: truetext: myObject.message // 显示从C++传递的消息anchors.centerIn: parent}
}

4)、生成效果如下:

2、实例(qt c++中qmlRegisterType注册方式)

1)、创建一个空的Qt Quick程序。创建后,基本目录结构如下:

2)、打开main.cpp,进行修改。

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QObject>
#include <QDebug>class MyObject : public QObject
{Q_OBJECTQ_PROPERTY(QString message READ message WRITE setMessage NOTIFY messageChanged)
public:QString message() const {return m_message;}void setMessage(const QString& qMsg){m_message = qMsg;}public slots:void sayHello() {m_message = "Hello from C++!";qDebug() << m_message; // 终端中打印emit messageChanged();}signals:void messageChanged();private:QString m_message="hello init";
};int main(int argc, char *argv[])
{QGuiApplication app(argc, argv);QQmlApplicationEngine engine;qmlRegisterType<MyObject>("MyObjectLib", 1, 0, "MyObject");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();
}#include "main.moc"

3)、打开main.qml,进行修改。

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
import MyObjectLib 1.0ApplicationWindow {visible: truewidth: 400height: 300title: "QML and C++"MyObject{id: testObj}Button {text: "Click Me"onClicked: {testObj.sayHello(); // 调用C++对象的函数console.log("调用C++对象的函数\n");}}Label {id: label1visible: truetext: testObj.message // 显示从C++传递的消息anchors.centerIn: parent}
}

4)、生成效果如下:

 

http://www.dtcms.com/wzjs/397544.html

相关文章:

  • 网站备案 个人互联网营销工具
  • 手机自己做网站网站搭建服务
  • 360网站卖东西怎么做的产品推广运营的公司
  • 网站流量统计怎么做的seo比较好的优化方法
  • 城固县网站建设百度快照首页
  • 企业应如何进行网站建设今日冯站长之家
  • 如何做网站的订阅国际婚恋网站排名
  • 网站建设合同范本站长之家seo综合查询
  • 南京公共工程建设中心网站营销型网站建设运营
  • discuz做电影网站如何查询百度收录
  • 上海哪家网站建设公司好cps广告联盟
  • 黄网网站是怎么做的微博推广
  • 做大型网站建设seo数据优化
  • 代做网站作业企业如何建站
  • 上海人才网官网招聘招聘seo知识分享
  • 东城区网站建设成都seo论坛
  • 如何做网站路径分析长沙seo搜索
  • 梅县区住房和城乡规划建设局网站北京seo技术交流
  • 万荣做网站谷歌ads广告投放
  • 有什么做日结兼职的网站化工网站关键词优化
  • 吉野家网站谁做的搜索引擎网站优化推广
  • 三网站建设一键关键词优化
  • 模板建站和定制建站南京网站设计公司
  • 开设公司网站优化推荐
  • 参考效果图网站九江seo
  • 获取网站访问者qq号百度seo关键词工具
  • 节日彩灯制作公司郑州网站优化公司
  • 怎么做网站设计方案百度自己的宣传广告
  • 我国政府网站建设现状百度应用宝
  • 双流区规划建设局官方网站网站推广的几种方法