1

QT 的 QDate::toString() 函数,不带参数,将 QDate 转换为默认格式为“ddd MMM d yyyy”的 QString。我们的应用程序是国际化的,这种固定格式不反映区域设置和区域设置。我不想使用 LongFormat 因为它占用太多空间;默认的无参数是更优的长度。我从系统 QLocale 中获得了 LongFormat,对格式字符串进行了按摩,为我们提供了一个类似于默认格式但也反映国际设置的 QString。

有什么方法可以告诉 QT 在调用 toString() 时使用我的新格式化字符串,这样我就不必找到所有现有的 toString() 调用并将格式化字符串作为参数插入?

4

1 回答 1

2

根据 的Qt 文档QDate,您可以指定您想要的格式QDate::toString()

现在,为了避免困扰您的重复,您可以在某处指定一个static包含应用程序格式的变量。然后每次调用时将其作为参数提供QDate::toString()。这样,您将必须始终使用相同的变量/格式。


但是如果你真的不想给出任何参数,解决方案是通过将默认格式更改为你想要的格式来子类化QDate并重新定义方法。toString()

例如:

.h

class MyDate final : public QDate
{
    private:
        static QString my_format;

    public:
        MyDate();
        MyDate(int y, int m, int d);
        MyDate(const QDate & date);

        QString toFormattedString() const;
};

.cpp

QString MyDate::my_format = "yyyy - MMMM dddd dd"; // Specify the format you desire.

MyDate::MyDate() : QDate()
{}
MyDate::MyDate(int y, int m, int d) : QDate(y, m, d)
{}
MyDate::MyDate(const QDate & date) : QDate(date)
{}
QString MyDate::toFormattedString() const
{
    return toString(my_format);
}

您可以按如下方式进行(示例):

MyDate md(QDate::currentDate());
qDebug() << md.toFormattedString();

toFormattedString()为了使代码更易于理解,我在这里命名了该方法。随意调整它。

我希望它会有所帮助。

于 2019-08-06T07:32:36.413 回答