[Development] Wither QString?

Sze Howe Koh szehowe.koh at gmail.com
Fri Oct 18 03:49:28 CEST 2019


On Fri, 18 Oct 2019 at 08:43, Alexander Nassian
<nassian at bitshift-dynamics.com> wrote:
>
> C++ hasn‘t even proper Unicode handling integrated. std::string is a mess in my opinion.
>
> Beste Grüße / Best regards,
> Alexander Nassian
>
> Am 18.10.2019 um 02:30 schrieb Henry Skoglund <henry at tungware.se>:
>
> >  Hi, while writing lots of QString string fiddling code (keyboard macro utility) I feel something tugging at my sleeve:
> > the upcoming C++20, looking at std::format(), it seems really handy, e.g.:
> >
> > std::string s = std::format("String '{}' has {} characters\n", string, string.length());
> >
> > // for a German flavor you can use arg #
> > std::string s = std::format("{1} Zeichen lang ist die Zeichenkette '{0}'\n", string, string.length());
> >
> > // lots of formatting options with a ':' inside the curlies
> > std::string s = std::format("{0:b} {0:d} {0:x}", 42);   // s == "101010 42 2a"
> >
> > Using QString::arg() works fine but it's getting harder to ignore all the new C++ stuff and C++20 looks to be one of the bigger additions to the language since C++11.
> >
> > Perhaps the time has come to think about a retirement plan for QString?
> >
> > Rgrds Henry

I agree with Alexander; QString is far more pleasant to use than
std::string for many everyday tasks.

Aside from Unicode support, std::string lacks (clean) equivalents of
the following functions which I use regularly:
- QString::startsWith(), QString::endsWith()
- QString::split(), QString::section()
- QString::simplified(), QString::trimmed()
- QString::contains(), QString::indexOf() by regex
- QString::replace(), QString::remove() by substring or by regex

I refuse to ditch QString for std::string until Unicode and the above
functionality are offered in std::string, at the very least.


Here are more functions that are lacking in std::string. I personally
don't use them much, but they look pretty handy if the right project
comes along:
- QString::right()
- QString::localeAwareCompare()
- QString::compare() with Qt::CaseInsensitive
- QString::chop(), QString::chopped()
- QString::leftJustified(), QString::rightJustified()


Regards,
Sze-Howe


More information about the Development mailing list