私のアプリには、列の 1 つで QDate を取る QTreeWidget があります。列は QVariants を受け入れるため、事実上あらゆる種類のデータを保持できます。列の並べ替え機能が正しく機能するには、TreeWidget が QStrings ではなく実際の QDate オブジェクトを使用する必要があることがわかりました。日付に QStrings を使用すると、適切な時系列順ではなく、文字列の数値順に並べ替えられます。(これは間違っています!) 私のプログラムは、いくつかの日付形式をサポートしています: USA スタイル、ヨーロッパ スタイル、ISO-8601 スタイル。ユーザーが選択した日付形式に応じて、アプリ全体ですべての一貫性を維持したいと考えています。
ただし、QDate は日付を MM/DD/YYYY 形式でしか表示しないことに気付きました。QDate が Windows では MM/DD/YYYY を表示するのに、まったく同じコードが Linux では MM/DD/YY を表示するという奇妙なバグもあります。QString に変換せずに、QDate で日付を YYYY/MM/DD または DD/MM/YYYY 形式で表示するにはどうすればよいですか? QTreeWidget の列の並べ替え機能を壊さないように、すべてを QDate 形式に保つことが不可欠です。
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);