[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