QML与c++线程类

QML与c++线程类

因需要开发手机软件给嵌入式设备升级,c++ QFileDialog在手机端打开文件选择窗口时总是会闪退,无奈学习了下公司大佬的qml代码,又从网上查找了些资料。解决了线程与qml通信问题
QML中添加一个c++的类

我们可以先创建一个C++类,创建好后,在main.cpp文件中将这个类注册成qml中可用的一个项目

main.cpp
    qmlRegisterType<qml_interface>("qml_interface",1,0,"Myqmlinterface");

其中第一个qml_interface是你的类名,第二个qml_interface是你在QML运用改类时要导入的文件包名 1,0为版本号,Myqmlinterface是你在QML使用时输入的名称;
如下,第一行导入该类,第三行创建该类

import qml_interface 1.0
Window{
	Myqmlinterface{
    	    id:qmlinterface
	}
}

我们在此类创建线程,将线程的信号槽与该类中的信号槽相连接,即通过这个中间类,完成线程与QML的连接

qml_interface::qml_interface(QObject *parent) : QObject(parent)
{
    int_button = 1;

    init_data();

    mydatathread = new DatAnalyze;
    mythreadD = new QThread;
    mydatathread->moveToThread(mythreadD);

    connect(this,SIGNAL(sig_test_send(QByteArray)),mydatathread,SLOT(slot_test_send(QByteArray)));

    //信号槽连接
    connect(this,SIGNAL(sig_floor_clicked(int)),mydatathread,SLOT(slot_floor_clicked(int)));
    connect(mydatathread,SIGNAL(sig_display(int, unsigned char)),this, SLOT(slot_display(int, unsigned char)));

    mythreadD->start();

}

void qml_interface::get_floor_data()
{
    emit sig_floor_clicked(floor_inf);
}

void qml_interface::slot_display(int floor, unsigned char statu)
{
    if(statu == 0x00){
        emit sig_display(floor,0);
    }else if(statu == 0x10){
        emit sig_display(floor,1);
    }else if(statu == 0x20){
        emit sig_display(floor,2);
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值