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));
相关推荐
小鱼仙官4 小时前
Qt 主界面弹出分界面
开发语言·qt
誰能久伴不乏8 小时前
用 UDP 做一条“可靠“的控制通道
c++·qt·网络协议·udp
Bczheng112 小时前
VS2022 安装MFC和QT
c++·qt·mfc
会编程的小孩13 小时前
8.19号函数
qt
蓝祁子yoky2 天前
Qt学习日记 Day15:网络编程(二)- UDP基础
网络·qt·学习
读书札记20222 天前
Qt UTF-8和UTF-8(BOM)
开发语言·qt
ShineWinsu2 天前
对于Qt:QProgressBar常见属性的解析
开发语言·c++·qt·进度条·gui·定时器·qprogressbar
ShineWinsu2 天前
对于Qt:QLCDNumber常见属性以及QTimer的解析
服务器·数据库·c++·qt·gui·qtimer·qlcdnumber
听风吹等浪起2 天前
第26章:ViT+InceptionDW+FocalLoss改进|CT骨折影像二分类完整Pytorch实现(含PyQt5推理GUI)
pytorch·qt·分类
ShineWinsu2 天前
对于Qt:QRadioButton常见属性以及QButtonGroup的解析
数据库·c++·qt·microsoft·gui·qradiobutton·qbuttongroup