1

私のアプリには、列の 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);
4

2 に答える 2

4

QDate は、オペレーティング システムの現在の設定に従います。その設定がたまたま MM/DD/YY である場合、それが得られます。注: これはユーザーが望んでいるものです。すべてのアプリケーションで統一された日付形式。

この設定は、OS の現在のロケール設定にも影響されます。たとえば、米国ではデフォルトは MM/DD/YY ですが、ヨーロッパのほとんどの国では DD/MM/YY です。

言い換えれば、心配しないでください。これはバグではなく、機能です。そして、それを回避しようとすべきではありません。ユーザーは、アプリケーションがシステム設定を無視することを望んでいません。私のシステムが MM/DD/YY で日付を表示するように設定されている場合、あなたのアプリが独自の処理を行って代わりに YYYY/MM/DD 形式で日付を表示することは絶対に望まないでしょう。

于 2012-11-30T20:21:05.417 に答える