Qt中无需QDate实例实现日期字符串转Label文本的优雅写法
Qt静态调用QDate实现日期字符串转显示的优化方案
需求:读取TXT中的日期字符串,转成QDate后再转为QString显示到Label上,现有基于QDate实例的代码可正常运行,希望改用更简洁的无实例静态调用写法。
现有可行代码(基于实例)
QDate QDateInstance; for (int i = 0; i < (int)TravelAgency1.FlightsList.size()-1; i++){ if (SearchedBooking == TravelAgency1.FlightsList[i]->getId()){ ui->ID_Output->setText(QString::number(TravelAgency1.FlightsList[i]->getId())); QDateInstance = QDateInstance.fromString(QString::fromStdString(TravelAgency1.FlightsList[i]->getFromDate()),"yyyyMMdd"); ui->StartD_Output->setText(QDateInstance.toString()); QDateInstance = QDateInstance.fromString(QString::fromStdString(TravelAgency1.FlightsList[i]->getToDate()), "yyyyMMdd"); ui->EndD_Output->setText(QDateInstance.toString()); } }
错误尝试的问题分析
你之前写的静态调用代码存在两个问题:
- QDate没有
fromStdString静态方法,需要先把std::string转成QString,再用QDate::fromString处理 - QDate的
toString是成员方法,不能通过QDate::toString静态调用
正确的无实例静态链式写法
直接通过QDate::fromString静态方法返回的QDate对象,链式调用toString()方法,无需创建额外实例变量:
优化后的代码片段
for (int i = 0; i < (int)TravelAgency1.FlightsList.size()-1; i++){ if (SearchedBooking == TravelAgency1.FlightsList[i]->getId()){ ui->ID_Output->setText(QString::number(TravelAgency1.FlightsList[i]->getId())); // 处理起始日期 QString fromDateStr = QString::fromStdString(TravelAgency1.FlightsList[i]->getFromDate()); ui->StartD_Output->setText(QDate::fromString(fromDateStr, "yyyyMMdd").toString()); // 处理结束日期 QString toDateStr = QString::fromStdString(TravelAgency1.FlightsList[i]->getToDate()); ui->EndD_Output->setText(QDate::fromString(toDateStr, "yyyyMMdd").toString()); } }
说明
QDate::fromString是静态方法,接收QString格式的日期字符串和格式符,直接返回QDate对象- 对返回的QDate对象直接调用成员方法
toString(),即可得到格式化后的日期字符串,无需额外创建QDate实例变量
内容的提问来源于stack exchange,提问作者Yaroslav Zabello
相关产品推荐
相关产品推荐

