Page 1 of 1

Can't convert const *char to QChar32

Posted: Fri Apr 17 2020 12:19 pm
by opaque
It's a g++ error message that I vaguely recall. I put it here because of plain curiosity of how to proper adapt it to Cs. I think I will revisit it in the future but now I'm about to cancel my plan to adapt Lazarus' Qt5 binding to Cs as I think I have more to learn about Object Pascal.

The original code is here: https://github.com/graemeg/lazarus/blob/upstream/lcl/interfaces/qt5/cbindings/src/pascalbind.h

The problematic code:

Code: Select all

inline void copyQStringToPWideString(const QString &qs, PWideString ps)
{
if (qs!=0 && ps) copyUnicodeToPWideString(qs.unicode(), ps, qs.length());
}


inline void copyPWideStringToQString(PWideString ps, QString &qs)
{
  qs.setUtf16((ushort *)unicodeOfPWideString(ps),
    lengthOfPWideString(ps));
}
I translated these line according to the migration guide (https://www.copperspice.com/docs/cs_api_1.6/class_qstring8.html#migration-qstring) into:

Code: Select all

inline void copyQStringToPWideString(const QString &qs, PWideString ps)
{
if (qs!=0 && ps) copyUnicodeToPWideString(qs.constData(), ps, qs.length());
}


inline void copyPWideStringToQString(PWideString ps, QString &qs)
{
  qs.fromUtf16((ushort *)unicodeOfPWideString(ps),
    lengthOfPWideString(ps));
}
And g++ give this error message.

Re: Can't convert const *char to QChar32

Posted: Wed Dec 16 2020 2:33 pm
by seasoned_geek
I know nothing about Object Pascal. What I can tell you about is C++, at least a bit.

Code: Select all

inline void copyPWideStringToQString(PWideString ps, QString &qs)
{
  qs.setUtf16((ushort *)unicodeOfPWideString(ps),
    lengthOfPWideString(ps));
}
The first thing you have to do is look at the doc.

https://www.copperspice.com/docs/cs_api/class_qstring8.html#add2174ee7d5d91fdcba0bc4ea4d63552

Code: Select all

QString8 QString8::fromUtf16 	( 	const char16_t *  	str,
		size_type  	numOfChars = -1 
	) 	
The method wants a const char16_t * but the previous code is doing a brutal cast to ushort *. You are attempting to cast away const-i-ness. In the C++ world the politically correct cast would be

static_cast<const char16_t *>(unicodeOfPWideString(ps))

If this is completely wrong, I'm sorry. I just saw you hadn't had a response in quite some time.

Re: Can't convert const *char to QChar32

Posted: Wed Dec 16 2020 7:32 pm
by ansel
seasoned_geek wrote: Wed Dec 16 2020 2:33 pm If this is completely wrong, I'm sorry. I just saw you hadn't had a response in quite some time.
Your response is correct. Thanks for taking the time to post a reply.