[Development] QString and related changes for Qt 6

Thiago Macieira thiago.macieira at intel.com
Tue May 12 23:09:21 CEST 2020

On Tuesday, 12 May 2020 10:48:24 PDT Giuseppe D'Angelo via Development wrote:
> What do you do? Adding a QStringView overload will make calls ambiguous,
> removing the QString one will be an ABI break. We need an established
> solution for these cases as they'll pop up during the Qt 6 lifetime.


And the API policy must be one such that it doesn't depend on what the method 
does *today* and it doesn't create a mess. Functions change.

Let's take an example with QRegularExpression's pattern (not picking on 
Giuseppe). Today it is:

    QString pattern() const;
    void setPattern(const QString &pattern);

QString QRegularExpression::pattern() const
    return d->pattern;

Since this is returning a stored QString, someone might feel that it should 
instead return a QStringView. But if it's storing, then the setter should 
remain const QString &. That would be:

    QStringView pattern() const;
    void setPattern(const QString &pattern);

But suppose that there's a pcre2_get_pattern_16() function. Then someone might 
be tempted to say that since PCRE stores the pattern, we don't need to. That 
would mean QRegularExpression::pattern() ought to be written as:

QString QRegularExpression::pattern() const
    qsizetype len = pcre2_get_pattern_length_16(d->compiledPattern);
    QString retval(Qt::Uninitialized, len);
    pcre2_get_pattern_16(d->compiledPattern, retval.data(), len);
    return retval;

But if PCRE is going to store the pattern and PCRE doesn't use QString, then 
setPattern could take a QStringView instead. That would be:

    QString pattern() const;
    void setPattern(QStringView pattern);

That's the opposite of the previous one.

I want rules that determine what the API should be without looking at the 
implementation of those two functions.
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel System Software Products

More information about the Development mailing list