[Development] QLocale work
John Layt
jlayt at kde.org
Wed Jan 18 01:40:05 CET 2012
On Monday 16 Jan 2012 23:13:39 Thiago Macieira wrote:
> I'd say that QLocale should return the information you need. If you need to
> display that, why shouldn't QLocale provide that info?
>
> *Setting* the info is, however, out-of-scope for Qt.
When I was discussing it with Denis at QtCS he was fairly clear he didn't want
to clutter up the QLocale api with lots of getX/getY/getZ api (he didn't like
what was already there), but was happy for it to be in another class embedded
in QLocale, which is why I've mentioned in the past a QLocaleSettings class,
or doing something more with QSystemLocale to make it return all settings not
just a limited subset of host settings.
In fact, QSystemLocale is on my hit list, as both the implementation and its
API seem to me ugly and awkward and a potential BIC problem. Currently the
public base class has 2 virtual methods defined on it with no base
implementation in the main file and no private d class. The main virtual
query() method takes an enum and optional QVariant for the required setting
and returns a QVariant holding the setting. Each host system file then
implements the two virtual methods at base class level, i.e. not actually
derived or virtual, but usually using a private d class or structure for the
actual implementation. In the future as we add more features using CLDR,
there's no guarantee the current API will stretch to fit and the virtual
methods would normally make it fragile if they were actually being used that
way.
What I would prefer is to make the public QSystemLocale class a default
implementation with non-virtual methods and a private d class that is virtual
and has derived implementations for each platform. This seems safer and
cleaner, and would also allow us to add a nicer more direct API, e.g.
decimalPoint() instead of query(DecimalPoint). This base class then looks
just like what a QLocaleSettings class should be, if the base d class were to
return the CLDR settings. A system QLocale instance would have a pointer to
the static global QSystemLocale instance to use, but a named QLocale instance
would create it's own QSystemLocale without the system overrides. The QLocale
parse/format methods would then just have a single code path querying the
settings and passing them to ICU to use.
That's one possible model anyway, there's still some thinking required on the
finer details.
John.
More information about the Development
mailing list