`
mmdev
  • 浏览: 12951092 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

QML与c++交互学习笔记(七)

 
阅读更多


1.假设这样一种情况

我这里由一个Wideget继承自QWidget上面添加来一个QLabel,一个QPushButton

我如何把这个Wideget放到QML中使用,那么我当QPushButton按下后我怎么在QML中进行处理呢?

我这里指出一种方法

Wideget继承QGraphicsProxyWidget,对Wideget进行导出,在QML中创建

此对象,在他导出的信中进行处理,具体代码。

还有就是这个网址上说明来很多QMLc++之间通讯的方法,很悲剧的是我的assistant中却没有者部分,不知道版本低还是怎么的。

http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html



2.具体代码



//widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QGraphicsProxyWidget>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
class Widget : public QGraphicsProxyWidget
{
    Q_OBJECT
public:
    explicit Widget(QGraphicsItem *parent = 0);
    ~Widget();
    Q_INVOKABLE void changeText(const QString& s);
signals:
    void sendOnButton(void);
private:
    QPushButton *m_Btn;
    QLabel      *m_Label;
    QWidget     *m_MainWidget;
};
#endif // WIDGET_H


//widget.cpp
#include "widget.h"
Widget::Widget(QGraphicsItem *parent) :
    QGraphicsProxyWidget(parent)
{
    m_MainWidget = new QWidget;
    m_Btn = new QPushButton(m_MainWidget);
    m_Label = new QLabel(m_MainWidget);
    m_Btn->setText("PushButton");
    m_Btn->setGeometry(10, 10, 100, 30);
    m_Label->setGeometry(10, 40, 200, 30);
    QObject::connect(m_Btn, SIGNAL(clicked()), this, SIGNAL(sendOnButton()));
    setWidget(m_MainWidget);
}
Widget::~Widget()
{
    delete m_MainWidget;
}
void Widget::changeText(const QString& s)
{
    m_Label->setText(s);
    qDebug(" call Widget::changeText");
}


// main.cpp
#include <QtGui/QApplication>
#include <QtDeclarative/QDeclarativeView>
#include <QtDeclarative/QDeclarativeEngine>
#include <QtDeclarative/QDeclarativeComponent>
#include <QtDeclarative/QDeclarativeContext>
#include "widget.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    qmlRegisterType<Widget>("UIWidget", 1, 0, "Widget");
    QDeclarativeView qmlView;
    qmlView.setSource(QUrl::fromLocalFile("../UICtest/UICtest.qml"));
    qmlView.show();
    return a.exec();
}


// UICtest.qml
import Qt 4.7
import UIWidget 1.0
Rectangle {
    width: 640
    height: 480
    color: "black"
    Widget { id: uiwidget; x: 100; y: 100; width: 400; height: 100;
        // 关键在这里,当一个信号导出后他的相应的名字就是第1个字母大写,前面在加上on
        // 例如 clicked -- onClicked   colorchange --onColorchange;
        onSendOnButton: { uiwidget.changeText(textinput.text); }
    }
    Rectangle{
        x: 100; y: 20; width: 400; height: 30;  color: "blue"
        TextInput {id: textinput; anchors.fill: parent; color: "white" }
    }
}

说明:

这里实现的是当QPushButton按钮按下后,获取QMLTextInput上的文本,

QLabel进行设置,关键点在于Widget中的信号函数sendOnButton,他导出后在QML

将引发的是onSendOnButton只要在QML中对这个编写处理就可以实现,具体看代码。

分享到:
评论

相关推荐

    QML与C++交互QML与C++交互

    QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++交互QML与C++...

    QML 与 C++交互 - 02 C++暴露方法到QML

    本系列会介绍几种QML与C++进行数据交互的方法,包括信号槽的链接,QML调用C++类的方法等。 本代码为第二篇《QML 与 C++交互 - 02 C++暴露方法到QML》的示例demo

    QML 与 C++交互 - 01QML访问C++属性

    本系列会介绍几种QML与C++进行数据交互的方法,包括信号槽的链接,QML调用C++类的方法等。 本文为第一篇:QML访问C++属性。可以访问我的博客查看代码解释。

    QML2与C++交互

    关于QML与C++交互具体实例,里面涉及QML与C++进行数据交互等功能

    Qt之QML与 C++ 交互.docx

    1. C++ 对象注册到 QML,QML 访问 C++ 对象; 2. QML 暴露对象给 C++ 进行交互; 3. C++ 创建 QML 对象并进行交互; 4. C++ 对象与 QML 通过信号槽交互。 文档详细描述了四种方式的使用

    qml与C++交互代码

    qml与C++交互代码

    QML与C++交互,解压后路径去掉中文.rar

    博客的相关代码,演示QML与C++的交互。博客地址https://blog.csdn.net/gongjianbo1992/article/details/87965925

    QML与c++交互在地图上增加mark的源代码

    QML与c++交互在地图上增加mark的源代码

    QML与c++交互

    QML c++ 的详细介绍 和大量交互例子

    C++和QML交互

    Qt 提供了两种在 QML 环境中使用 C++ 对象的方式: 1. 在 C++ 中实现一个类,注册到 QML 环境中, QML 环境中使用该类型创建对象 2. 在 C++ 中构造一个对象,将这个对象设置为 QML 的上下文属性,在 QML 环境中直接...

    QML与C++交互使用

    我们知道 ,通过Qt Declarative module ,C++可以动态创建和操纵QML的组件(cpmponents) ,我们利用这些API使用C++来拓展我们的QML程序,反过来也可以将QML嵌入到你的C++程序中。通过Qt的元对象系统( Qt‘s meta...

    Qml与C++通信交互

    Qml与C++通信交互Demo,只有最简单的Qml界面调用C++类的函数

    qml与c++交互

    NULL 博文链接:https://tcspecial.iteye.com/blog/2034585

    Qt实例分析——QML调用C++方法, C++调用QML(

    QML调用C++方法, C++调用QML,C++发送信号QML接收

    Qt Qml实例分析—QML调用C++方法, C++调用QML

    QML调用C++方法, C++调用QML,C++发送信号QML接收

    c++与QML相互通信 数据交互

    c++数据传入qml, qml数据返回给c++,数据互传 ,两种方式

    QML与C++混合编程.pdf

    用于管理组件并与组件交互的C++ API - QtDeclarative模块 言归正传:通过Qt Creator,我们可以轻松生成一个Qt Quick的应用工程,从而为QML生成应用程序框架。具体操作详见:创建qt quick (qml) 应用程序。 C++与...

    TableEdit-0.1.5_qml_C++_

    使用qml实现的表格控件,支持JSON文件的导入,支持表格的增删改查操作。支持表格的编辑,撤销等操作。同时内嵌搜索功能

    QML--实现与HTML的交互

    QML--实现与HTML的交互

    QML与c++混编 测试

    Qt 5.6.2写的的小例子,实现QML调用C++的信号和槽函数,

Global site tag (gtag.js) - Google Analytics