【问题标题】:Can I change default formatting for QDate::QString()?我可以更改 QDate::QString() 的默认格式吗?
【发布时间】:2019-08-06 05:08:43
【问题描述】:

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

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

【问题讨论】:

    标签: qt tostring qdate


    【解决方案1】:

    根据Qt documentation of 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(),以使代码更易于理解。随意调整它。

    我希望它会有所帮助。

    【讨论】:

    • 谢谢。我已经实现了静态变量方法。子类化 QDate 我没有想到,这是一种有趣的方法。我认为静态变量方法在我们的代码库中可能是最好的,所以会使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2018-03-21
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多