`
duyouhua1214
  • 浏览: 236297 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

如何在Qt和QML之间建立信号槽链接

    博客分类:
  • QT
 
阅读更多
下面的例子讲述了在Qt和QML代码之间建立信号槽链接。这里需要注意:由于QML中的函数是JavaScript,这些函数的参数是没有类型的。
在建立信号槽时需要使用QVariant类型。

myclass.h

#ifndef MYCLASS_H
#define MYCLASS_H
 
#include <QObject>
#include <QVariant>
 
class MyClass : public QObject
{
    Q_OBJECT
 
public:
    MyClass() {}
 
public slots:
    void getData() {
        QString text("New data");
        emit data(QVariant(text));
    }
 
signals:
    void data(QVariant data);
};
 
#endif // MYCLASS_H

main.cpp

#include <QApplication>
#include <QGraphicsObject>
#include <QDeclarativeView>
#include <myclass.h>
 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
 
    MyClass myClass;
 
    QDeclarativeView view;
    view.setSource(QUrl("./ui.qml"));
    view.setResizeMode(QDeclarativeView::SizeRootObjectToView);
 
    QObject *rootObject = dynamic_cast<QObject*>(view.rootObject());
 
    QObject::connect(rootObject, SIGNAL(dataRequired()), &myClass, SLOT(getData()));
    QObject::connect(&myClass, SIGNAL(data(QVariant)), rootObject, SLOT(updateData(QVariant)));
 
#if defined(Q_WS_MAEMO_5)
    view.setGeometry(QRect(0,0,800,480));
    view.showFullScreen();
#elif defined(Q_WS_S60)
    view.setGeometry(QRect(0,0,640,360));
    view.showFullScreen();
#else
    view.setGeometry(QRect(100,100,800, 480));
    view.show();
#endif
 
    return app.exec();
}

ui.qml

// ui.qml
import Qt 4.7
 
Rectangle {
    signal dataRequired;
 
    function updateData(text) { dataText.text = text }  // slot
 
    anchors.fill: parent; color: "black"
 
    Text {
        id: dataText
        anchors.centerIn: parent; color: "white"
    }
 
    MouseArea {
        anchors.fill: parent
        onClicked: dataRequired()
    }
}

在这个例子中,我们在Qt和QML之间建立了双向链接,当rootObject的信号 dataRequired触发时,
myClassgetData被调用;当myClass的信号data触发时, rootObjectupdateData被调用

来源:http://www.thisisqt.com/?action-viewnews-itemid-10
分享到:
评论

相关推荐

    用QT QML 实现的MODBUS_郎汉德PLC_Master主机代码

    最后,项目使用QT 5.14版本,这是一个稳定且功能丰富的版本,支持QML的许多特性,如异步操作、信号与槽机制以及丰富的UI组件。确保你有对应的QT版本安装,以便能正确运行和调试项目。 总的来说,这个项目提供了一个...

    【QT】 1. 建立QT编译环境

    理解信号和槽机制,这是QT中处理事件和通信的核心方式,也是编程的关键。 在实际开发中,你可能会遇到一些问题,例如依赖库的缺失、编译错误或兼容性问题。这时,查阅QT的官方文档、社区论坛(如iteye、Stack ...

    Advanced_Qt_Programming

    6. **多线程**:深入理解Qt的线程支持,包括QThread、信号槽在线程间的同步,以及如何避免数据竞争和死锁问题。 7. **国际化和本地化**:介绍如何利用Qt的i18n支持,创建支持多种语言的应用程序。 8. **性能优化**...

    qt+zint实现条形码打印

    在本文中,我们将深入探讨如何使用Qt和Zint库来实现条形码的...关键在于理解各个组件的用途,以及如何在它们之间建立有效的接口和通信。这不仅对条形码应用有帮助,也为其他涉及图像处理和打印需求的项目提供了参考。

    使用QT进行程序开发入门快速指导 V2.0

    在QT开发中,熟悉QT Creator或VS2010的集成环境,掌握QT的信号与槽机制,以及QWidgets和QML(用于创建现代UI)的使用,是至关重要的。此外,了解如何利用QT的网络、数据库和多线程功能,能够进一步提升应用程序的...

    qt编程技巧

    这个主题涵盖了一系列的技术和最佳实践,包括对象模型、信号与槽机制、布局管理、事件处理、网络编程、数据库集成以及QML等高级特性。 首先,QT的核心是其强大的C++对象模型。所有QT类都是从QObject派生的,这意味...

    QT_MQTT_quicksubscription.zip

    在这个文件中,我们可能会看到按钮、文本视图等元素,以及与"qmlmqttclient"对象交互的信号和槽。例如,当用户点击“订阅”按钮时,QML可能会触发一个信号,调用C++中定义的订阅方法。 "qml.qrc"文件用于将资源(如...

    Qt Creater快速入门(第三版.zip

    Qt Creator支持C++和QML语言,通过其强大的代码编辑器,可以实现语法高亮、代码自动完成和错误检查等功能。了解Qt的类库,如QWidget、QLayout、QPushButton等,是构建图形用户界面的关键。同时,掌握信号与槽机制,...

    银河麒麟桌面操作系统V10SP1龙芯3A4000版本qt5-default_5.12.8版本及依赖包

    1. **模版类和元对象系统**:Qt的C++模版类提供了丰富的数据类型,而元对象系统则允许在运行时反射和动态绑定,简化了事件处理和信号与槽机制。 2. **图形视图框架**:提供了一种高效的方式来管理和渲染复杂的用户...

    realsense_qt5_vs2015_pcl_opencv工程配置参考

    然而,实际应用可能还需要处理RealSense数据的回调函数,使用Qt5的信号和槽机制来更新UI,以及利用PCL进行点云过滤和可视化。此外,你可能还需要对OpenCV进行图像处理操作,如边缘检测、特征匹配等。 总之,...

    09_Qt 模块简介1

    - **Qt Core**:这是Qt的核心模块,包含了基本的数据类型、线程、文件I/O、网络通信、信号与槽机制等,几乎所有的Qt模块都依赖于它。在Qt 5中,Core模块增加了JSON支持,并整合了XML处理功能。 - **Qt GUI**:提供...

    使用Qt Creator编写基于C/C++的局域网通信(C/S)程序(Linux平台)

    在Qt中,`QTcpServer`和`QTcpSocket`类用于实现TCP服务器和客户端之间的连接。`QTcpServer`监听特定端口,当客户端连接时,它会触发信号,我们可以连接这个信号来处理新连接。`QTcpSocket`则用于建立和管理与服务器...

    毕设:仿QQ界面的聊天系统,客户端使用qt进行界面设计,服务端为linux,利用sockets编程.zip

    在本项目中,开发者可能使用了QT的信号与槽机制,这是QT中处理事件和对象间通信的关键特性。 接下来,我们要讨论的是服务端部分。服务端运行在Linux环境下,使用了sockets进行网络通信。Sockets是TCP/IP协议族的一...

    Qt开发面试题.pdf

    - **信号槽机制**:通过`connect()`函数建立信号与槽之间的连接。 7. **创建和使用自定义图形项**: - **继承QGraphicsItem**:定义自定义图形项的行为。 - **使用QGraphicsScene添加自定义图形项**:通过`...

    qt入门教程

    **Qt入门教程** ...通过阅读提供的文档和教程,你将逐步熟悉Qt的各个方面,建立起坚实的Qt开发基础。记住,实践是提高技能的最佳途径,动手编写项目并不断尝试新功能,你将成为一名熟练的Qt开发者。

    bluetooth_windows.rar

    在本文中,我们将深入探讨如何在Windows环境下使用Qt框架实现与BLE(Bluetooth Low Energy)设备的连接和通信。首先,我们需要了解几个关键概念和技术。 **蓝牙技术:** 蓝牙是一种无线通信标准,允许不同设备在短...

    贝岭的matlab的代码-nfcchat:NfcChat是一个示例应用程序,它演示了如何使用NFCLLCP协议在两个兼容的NFC论坛设备之间创

    如果与第二个设备的连接丢失,应用程序会缓存消息并在重新建立链接后立即发送。 Symbian 注意事项:该项目要求您的设备上安装 Qt 4.7.4、Qt Mobility 1.2 和 Qt Quick Components。 二进制文件目前不使用智能安装...

Global site tag (gtag.js) - Google Analytics