QML学习笔记(五十二)QML与C++交互:数据转换——时间和日期

前言

接着上一节的,我们补充一下时间和日期的数据传递。

我将直接在上一节的工程添加代码,先附上链接:
QML学习笔记(五十一)QML与C++交互:数据转换------基本数据类型

一、代码测试

多余重复的部分就不说了,我们只说有变化的:

cpp 复制代码
class CppClass : public QObject
{
    Q_OBJECT

public:
    explicit CppClass(QObject *parent = nullptr);

signals:
    // 时间和日期
    void sendDateTime(QDateTime datetimeparam);
    void sendTime( QTime timeparam);

public slots:
    void cppSlot();

    // 时间和日期
    void timeSlot(QTime time);
    void dateTimeSlot(QDateTime datetime);

};
cpp 复制代码
void CppClass::cppSlot()
{
    qDebug()<<"cppSlot called";
    emit sendDateTime(QDateTime::currentDateTime());
    emit sendTime(QTime::currentTime());
}

void CppClass::timeSlot(QTime time)
{
    qDebug()<< "Time from QML is :" << time;
}

void CppClass::dateTimeSlot(QDateTime datetime)
{
    qDebug() << "DateTime from QML is :" << datetime;
}
cpp 复制代码
import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick.Controls 2.12
import com.mycompany 1.0

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("QmlBasicDataTypes")

    property string mValue:"Clicked %1 times, double is %2"
    property int clickCount:0

    CppClass{
        id: cppClassId

        // 日期和时间
        onSendDateTime:(datetimeparam) =>{
           console.log("Received datetime :"+ datetimeparam);
           //Extract info
           console.log("Year :" + datetimeparam.getFullYear())
           console.log("...",datetimeparam.toGMTString())
        }
        onSendTime: (timeparam)=>{
            console.log("Received time :"+ timeparam);
        }

    }

    Button{
        id: buttonId
        text: "test"
        onClicked: {
            cppClassId.cppSlot()
            var date = new Date()
            cppClassId.timeSlot (date);
            cppClassId.dateTimeSlot(date)

            //String fromatting
            clickCount++
            buttonId.text = mValue.arg(clickCount).arg(clickCount*2)
        }
    }
}

可以看到,在C++端,日期类是QDatetime,时间类是QTime,而qml中是Date,它会有getFullYear和toGMTString等方法获得年份和GMT格式日期。

看下打印结果:

这里最后一行接受的时间似乎有年份月份星期的错误,原因是我们传递的是QTime,这只包含时分秒时间,不包含日期,但qml端打印的时候是按照完整日期来打印的。

二、字符串替换参数

这里介绍一个替换字符串参数的方法:

cpp 复制代码
property string mValue:"Clicked %1 times, double is %2"
property int clickCount:0
cpp 复制代码
    Button{
        id: buttonId
        text: "test"
        onClicked: {
            //String fromatting
            clickCount++
            buttonId.text = mValue.arg(clickCount).arg(clickCount*2)
        }
    }

功能是每次点击递增clickCount,然后按钮文本进行相应的修改。

这种做法和QString.arg().arg()是类似的。

三、总结

本节学习了时间日期的数据传递,这也是一个比较常用的变量。

相关推荐
咕白m6254 小时前
通过 C++ 写入数据到 Excel 文档
c++·后端
Quz4 小时前
QML 网格与流式布局:Grid/GridLayout 与 Flow
qt
qq_401700414 小时前
Qt容器性能优化:QVector、QHash、QMap到底应该怎么选?
开发语言·qt·性能优化
十月的皮皮4 小时前
STM32从零到量产开发:四路继电器工业控制模块开发实战笔记(小白视角)
c语言·笔记·stm32·stm32cubemx·hal库
星栈独行5 小时前
Node 接口该写同步还是异步?
服务器·开发语言·后端·程序人生·node.js
疯狂打码的少年5 小时前
【软件工程】软件项目管理(人员/产品/过程/项目)
笔记·软件工程
Quz5 小时前
QML 线性布局:Row/RowLayout 与 Column/ColumnLayout
前端·qt
woshihuanglaoshi5 小时前
参数验证_Flutter在鸿蒙平台确保路由参数类型安全
学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
这就是佬们吗5 小时前
Python入门③-运算符、条件与循环
开发语言·数据库·vscode·python·pycharm·编辑器
小刘学技术5 小时前
AI人工智能中的类别不平衡问题:成因、影响与解决方案
开发语言·人工智能·python·机器学习