[Development] Proposed API change: Change signature of QMessageHandler to use QString
kai.koehne at nokia.com
kai.koehne at nokia.com
Thu Apr 12 10:17:37 CEST 2012
Hi,
I'd like to get https://codereview.qt-project.org/#change,22151,patchset=5 into 5.0/api_changes branch. It's one more change to the logging framework, specifically to the signature of QMessageHandler (new in 5.0, old QtMsgHandler is unchanged):
void (*QMessageHandler)(QtMsgType, const QMessageLogContext &, const char *);
becomes
void (*QMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &);
The reason is to avoid unnecessary string conversions, especially on Windows. E.g.
qDebug() << "Hello World";
will right now result in
const char * -> QString conversion in QDebug::operator(const char *) (QString::fromAscii(), shouldn't this be QString::fromLatin1() btw?)
QString -> const char * conversion in QDebug::~QDebug() (QString::toLocal8Bit())
const char *-> QByteArray conversion in qMessageFormatString() for the default message handler
a QByteArray -> QString conversion in qWinMessageHandler() (QString::fromLocal8Bit)
So we're converting from latin1 to utf16 to local8bit to utf16 :) The patch mitigates this somewhat by passing const QString & as argument to the message handler, instead of const char *.
Note that QtDeclarative right now installs a message handler with the const char * signature. That means if the patch is accepted, we'd need to synchronize the qtbase with a qtdeclarative update.
Regards
Kai
PS: Robin Burchell originally pointed out the problem
--
Kai Koehne
Senior Software Engineer
Nokia, Mobile Phones
Nokia gate5 GmbH
Firmensitz: Invalidenstr. 117, 10115 Berlin, Germany
Registergericht: Amtsgericht Charlottenburg, Berlin: HRB 106443 B
Umsatzsteueridentifikationsnummer: DE 812 845 193
Geschäftsführer: Dr. Michael Halbherr, Karim Tähtivuori
More information about the Development
mailing list