Qt之qml和widget混合编程调用

这篇具有很好参考价值的文章主要介绍了Qt之qml和widget混合编程调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先是创建一个widget项目
Qt之qml和widget混合编程调用,qt,命令模式,开发语言
然后需要添加qml和quick的插件使用
QT += quickwidgets qml
接着要在界面上创建一个quickwidget和按钮
Qt之qml和widget混合编程调用,qt,命令模式,开发语言
创建一个c++对象类
QObjectQml

#ifndef QOBJECTQML_H
#define QOBJECTQML_H

#include <QObject>
#include <QDebug>
class QObjectQml : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString deviceId READ getDeviceId WRITE setDeviceId)
    //这里进行属性绑定
public:
    explicit QObjectQml(QObject *parent = nullptr);

    //内部函数
    QString getDeviceId() {return deviceId;}
    void setDeviceId(QString id);
signals:

public slots:
     void funDemo(QString str);

private:
    QString deviceId;
};

#endif // QOBJECTQML_H

cpp实现文件

#pragma execution_character_set("utf-8")
#include "qobjectqml.h"

QObjectQml::QObjectQml(QObject *parent) : QObject(parent)
{

}

void QObjectQml::setDeviceId(QString id)
{
    deviceId = id;
    qDebug()<<"setDeviceId 数据库发生改变";
}

void QObjectQml::funDemo(QString str)
{
     qDebug()<<"我是c++函数被调用funDemo"<<str;
}

注册c++对象到系统中

#pragma execution_character_set("utf-8")
#include "mainwidget.h"
#include <QApplication>
#include "qobjectqml.h"
#include <QQmlApplicationEngine>
#include <QMetaObject>
#include <QVariant>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //将c++类以类型的方式注册到qml中
    qmlRegisterType<QObjectQml>("QObjectQml.module",1,0,"QObjectQml");

    MainWidget w;
    w.show();

    return a.exec();
}

接着c++的界面对象中调用即可

#include "mainwidget.h"
#include "ui_mainwidget.h"
#include <QQmlEngine>

#include "qobjectqml.h"
#include <QQmlApplicationEngine>
#include <QMetaObject>
#include <QVariant>

MainWidget::MainWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainWidget)
{
    ui->setupUi(this);

    //界面上的quickWidget添加qml
    ui->quickWidget->setSource(QUrl::fromLocalFile(":/mainqml.qml"));


}

MainWidget::~MainWidget()
{
    delete ui;
}
//SF1446179868590
void MainWidget::on_pushButton_clicked()
{
    QVariant retVal;
    QMetaObject::invokeMethod((QObject*)ui->quickWidget->rootObject(), /* Qml实例 */
                              "execute",         /* 函数名字 */
                              Qt::DirectConnection, /* 连接方式 */
                              Q_RETURN_ARG(QVariant, retVal), /* 标记返回值 */
                              Q_ARG(QVariant, "Hello"), /* 输入参数1 */
                              Q_ARG(QVariant, "world"));/* 输入参数2 */
}

qml文件的实现如下:

import QtQuick 2.0
import QObjectQml.module 1.0

Rectangle {
    width: 360
    height: 360

    signal finished()
    Component.onCompleted: {
        console.log("Hello,Hello")
    }
    //cc++的对象创建,并赋值deviceId
    QObjectQml {
        id: myObject
        /* 设置text属性 */
        deviceId: "12345"
        /* 读取打印text属性 */
        Component.onCompleted: console.log(text)
    }
    function execute(var1, var2) {
         console.log("我是qml函数被调用")//c++
        console.log(var1, var2)//c++调用了qml的此函数。输出结果
        console.log(myObject.deviceId)//并且输出QObjectQml对象的值
        return true;
    }
    Rectangle {
        id: button
        width: 100
        height: 30
        color: "red"
        radius: 5     // 让我们将矩形的角变圆一点,使其更像一个按钮
        anchors.centerIn: parent

        Text {
            id: buttonText
            text: qsTr("Button")
            color: "white"
            anchors.centerIn: parent
        }

        MouseArea {
            //我们将MouseArea设为与其父级(即矩形)一样大。因此,按下按钮上的任意位置都会触发事件
            anchors.fill: parent

            // Exploit the built-in "clicked" signal of the MouseArea component to do something when the MouseArea is clicked.
            //请注意,与信号关联的代码是纯JavaScript。我们可以使用其ID引用任何QML对象
            onClicked: {
                buttonText.text= qsTr("Clicked");
                buttonText.color= "black";
                myObject.deviceId = "ok不ok";
                myObject.funDemo("我靠");//qml点击事件中去调用c++的函数
            }
        }
    }
}

运行结果如下:
Qt之qml和widget混合编程调用,qt,命令模式,开发语言文章来源地址https://www.toymoban.com/news/detail-625063.html

到了这里,关于Qt之qml和widget混合编程调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【实操干货】如何开始用Qt Widgets编程?(三)

    Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 在本文中,我们通过使用C++和Qt Widgets模块实现一个简

    2024年02月11日
    浏览(52)
  • Qt QTabWidget插入widget(重要的是编程思想)

    大神们都是这么写代码的。 比如QTableWidget,每一个页面都插入一个QWidget,而不是一个人在一个一个Tab里面拖控件。 原始的运行图如下(没有插入QWidget): 插入两个QWidget后效果如下: Widget.h form1.h form2.h widget.cpp form1.cpp form2.cpp main.cpp 本文福利, 莬 费领取Qt开发学习资料包、

    2024年02月11日
    浏览(34)
  • Qt/QML编程之路:QtMultimedia/Radio(41)

    Qt有一个神奇的组件,那就是Qtmultimedia,它有强大的功能: 看看很多多媒体功能,都能在这里找到,不仅audio、video,还有camera、sound和radio。 比如:

    2024年01月25日
    浏览(45)
  • Qt/QML编程之路:OpenGL的示例(39)

    Qt编程之后,会发现有版本问题,有时候一个示例不同的版本下可能会跑不同,有些Qt5跑不同Qt6已经完善,可以跑通。 我就看到有个关于OpenGL的示例: 这个示例是演示怎么基于OpenGL编程的,但是调试时却发现glViewXXX等gl打头的函数说找不到reference,或者什么link不上之类的错误

    2024年01月19日
    浏览(46)
  • Qt/QML编程学习之心得:slider(34)

    滑条slider,有时也成为进度条progressbar,在GUI界面中也是经常用到的。 position属性表示为控件大小的一小部分,范围在0.0到1.0之间。visualPosition属性是相同的,只是在从右到左的应用程序中颠倒了它。在设置“滑块”样式时,visualPosition可用于定位控制柄。visualPosition在从左到

    2024年02月02日
    浏览(57)
  • qt matlab 混合编程

    matlab 2021a qt 5.12.10 qt creator 4.13.1 opencv 4.3.0 eigen-3.4.0/eigen-3.4.0 以 aberr_analy1 的导出 dill 举例 命令行中输入:deploytool 2. 选择LIbrarycompiler 3type 选择c++ 4,选择相应的 5. 点击package  选择保存的路径即可 6.导出后: 只需要 下面这个文件里面的dll .h 和。Lib 文件 1.opencv +eigen-3.4.0+matlab

    2024年02月07日
    浏览(44)
  • qt&python混合编程

    参考:Qt调用Python详细过程_贝勒里恩的博客-CSDN博客_qt python 1.环境搭建 1.1.python3.6 32bits 1.2.qt5.12.12 32bits 说明: (1). 务必保持版本位数一致,没有一致就得重新下载一致的版本 (2).以上软件环境的下载和安装,请自行百度,资料很多,在此重点说说混合编程遇到的错误如何解决. (3).请装

    2024年02月06日
    浏览(56)
  • Qt/QML编程之路:ListView实现横排图片列表的示例(40)

     ListView列表,在QML中使用非常多,排列一个行,一个列或者一个表格,都会用到ListView。 ListView显示从内置QML类型(如ListModel和XmlListModel)创建的模型中的数据,或在C++中定义的从QAbstractItemModel或QAbstract ListModel继承的自定义模型类中的数据。 ListView有一个模型和一个委托,前

    2024年01月25日
    浏览(54)
  • C++(Qt)与Python混合编程

    文章开头,请大家注意一点: 开始搭配环境之前,请大家完成对自己电脑位数的查看【32位/64位】 本篇博客适用于windows64位版本安装。当然了,32位的友友也可以对照着配置! 本篇教程所用环境如下: windows11(64位) Qt 6.4 Python 3.8.6 【由于本人已安装python版本为3.8.6,不想重

    2024年01月24日
    浏览(37)
  • 【QT进阶】Qt Web混合编程之html、 js的简单交互

    往期回顾 【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用(图文并茂超详细介绍)-CSDN博客 【QT进阶】Qt Web混合编程之QWebEngineView基本用法-CSDN博客 【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView(图文并茂超详细版本)-CSDN博客【QT进阶】Qt Web混合编程之VS2019 CEF的编译

    2024年04月22日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包