[LyX/master] Fix Qt6 deprecation warning (QString::fromUcs4(uint))

Enrico Forestieri forenr at lyx.org
Sun Mar 21 15:48:15 UTC 2021


On Sun, Mar 21, 2021 at 12:33:12PM +0100, Juergen Spitzmueller wrote:
> commit 52dff70641788cdd99ca40cf30550861555191c3
> Author: Juergen Spitzmueller <spitz at lyx.org>
> Date:   Sun Mar 21 12:38:47 2021 +0100
> 
>     Fix Qt6 deprecation warning (QString::fromUcs4(uint))

Note that this is wrong on systems where the size of wchar_t is 2 bytes.
If wchar_t is 4 bytes, the argument of those functions is interpreted as
UCS-4, but if wchar_t is 2 bytes it is interpreted as UTF-16.

I think you should use QString::fromStdU32String or similar.

> ---
>  src/support/qstring_helpers.cpp |    8 ++++++++
>  1 files changed, 8 insertions(+), 0 deletions(-)
> 
> diff --git a/src/support/qstring_helpers.cpp b/src/support/qstring_helpers.cpp
> index d34e455..103f4a9 100644
> --- a/src/support/qstring_helpers.cpp
> +++ b/src/support/qstring_helpers.cpp
> @@ -47,13 +47,21 @@ QString toqstr(docstring const & ucs4)
>  	// need to be superfast.
>  	if (ucs4.empty())
>  		return QString();
> +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
> +	return QString::fromStdWString(ucs4);
> +#else
>  	return QString::fromUcs4((uint const *)ucs4.data(), ucs4.length());
> +#endif
>  }
>  
>  QString toqstr(char_type ucs4)
>  {
> +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
> +	return QString::fromWCharArray(&ucs4, 1);
> +#else
>  	union { char_type c; uint i; } u = { ucs4 };
>  	return QString::fromUcs4(&u.i, 1);
> +#endif
>  }
>  
>  docstring qstring_to_ucs4(QString const & qstr)
> -- 
> lyx-cvs mailing list
> lyx-cvs at lists.lyx.org
> http://lists.lyx.org/mailman/listinfo/lyx-cvs

-- 
Enrico


More information about the lyx-devel mailing list