我的应用程序有一个 QTreeWidget,它在其中一个列中使用 QDate。由于这些列接受 QVariants,它们几乎可以保存任何类型的数据。我发现 TreeWidget 必须使用实际的 QDate 对象而不是 QStrings 才能使列排序功能正常工作。如果我使用 QStrings 作为日期,它们不会按正确的时间顺序排序,而是按字符串的数值排序。(这是错误的!)我的程序支持多种日期格式:美国风格、欧洲风格和 ISO-8601 风格。我想根据用户选择的日期格式在整个应用程序中保持一切一致。
但是,我注意到 QDate 仅以 MM/DD/YYYY 格式显示日期。还有一个奇怪的错误,QDate 在 Windows 上显示 MM/DD/YYYY,但完全相同的代码在 Linux 上显示 MM/DD/YY。如何让 QDate 以 YYYY/MM/DD 或 DD/MM/YYYY 格式显示日期而不转换为 QString?必须将所有内容保持为QDate 格式,这样我就不会破坏 QTreeWidget 中的列排序功能。
这是我将 QString 转换为 QDate 的代码:(nextitem是 QStringList)
// Convert QString date to QDate to make it sort correctly
QDate entrydate;
QString id=nextitem.at(2);
id=id.remove("/");
QString datepattern;
switch(Buffer::date_format){
case 0: // European
datepattern="ddMMyyyy";
break;
case 1: // USA Style
datepattern="MMddyyyy";
break;
case 2: // ISO
datepattern="yyyyMMdd";
break;
}
entrydate=QDate::fromString(id,datepattern);