QML和QWidget混合编程方式

一、UI处理

1、QML界面开发

javascript 复制代码
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

Rectangle{
    id:qmlApp
    objectName:'qmlApp'
    width: 1440
    height: 900
    visible: true

    signal qmlSignal(var fun,var val)

	//.................................
    //设置文件数量
    function setFileNumber(line,total,abnormal){
        switch(line){
        case 1:widgetLine1.setFileNumber(total,abnormal);break
        case 2:widgetLine2.setFileNumber(total,abnormal);break
        case 3:widgetLine3.setFileNumber(total,abnormal);break
        }
    }
}

2、QWidget处理

界面中放置一个QQuickWidget界面,将source设置为qml文件,如下图:

3、QWidget处理QML信号

1、qml添加信号

2、QWidget中连接qml信号和QWidget中的槽

cpp 复制代码
this->qmlRoot = ui->quickWidget->rootObject();
connect(this->qmlRoot, SIGNAL(qmlSignal(QVariant,QVariant)),this,SLOT(cppSlot(QVariant,QVariant)));

槽函数

cpp 复制代码
void MainWindow::cppSlot(QVariant fun, QVariant val)
{
    QString funStr = fun.toString();
    QString valStr = val.toString();
    qDebug()<<funStr<<"  "<<valStr;
}

4、QWidget调用QML中的函数

1、QML定义函数

2、QWidget中调用

.hpp

cpp 复制代码
QQuickItem *qmlRoot = nullptr;

.cpp

cpp 复制代码
this->qmlRoot = ui->quickWidget->rootObject();

使用

cpp 复制代码
QMetaObject::invokeMethod(qmlRoot, "setFileNumber",  Q_ARG(QVariant, line),Q_ARG(QVariant, total), Q_ARG(QVariant, abnormal));
相关推荐
AIminminHu1 天前
OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(5)番外篇:给 CAD 加上“控制台”——让用户能实时“调参数、看性能”)
qt·mfc·cad
楚Y6同学1 天前
QT C++ 实现图像查看器
开发语言·c++·qt·图像查看
羊小猪~~1 天前
【QT】-- 模型与视图简介
开发语言·数据库·c++·后端·qt·前端框架·个人开发
叶微信1 天前
Qt相关面试题
开发语言·qt
Lhan.zzZ1 天前
Qt开发踩坑:QList越界问题导致程序崩溃
数据库·c++·qt
不想看见4041 天前
Qt Network 模块中的 TCP/IP 网络编程详解
网络·qt·tcp/ip
MLGDOU1 天前
【Qt开发】信号与槽
开发语言·数据库·qt
我敲!1 天前
Qt中用//进行中文注释可能导致意外的BUG
qt·bug
羊小猪~~1 天前
【QT】-- QT操作数据库
数据库·qt·oracle
C++ 老炮儿的技术栈1 天前
c++ this 指针的用途
c语言·开发语言·c++·windows·qt·github