Перенаправить вывод stdout / stderr драйвера Qt PostgreSQL

Я сейчас звоню qInstallMsgHandler() перенаправить все ошибки Qt, предупреждения и отладки в мой собственный обработчик сообщений.

Это работает в 99% случаев, но при выполнении операторов SQL через объект QSqlQuery я по-прежнему получаю следующий вывод в stderr:

**WARNING:  nonstandard use of \\ in a string literal

LINE 1: EXECUTE qpsqlpstmt_11 ('<?xml version=''1.0'' encoding=''U

HINT:  Use the escape string syntax for backslashes, e.g., E'\\'.**

База данных — PostgresSQL версии 8.4. Любые идеи, как я могу также перехватить и перенаправить это предупреждение?

1

Решение

Кажется, что некоторая библиотека PostgreSQL, которая используется драйвером Qt, пишет в stderr,

Ян может перенаправить stderr как это:

freopen("my_log.txt", "w", stderr);
1

Другие решения

Для других с такой же проблемой вы можете отключить предупреждение с помощью этого кода:

QSqlQuery query(db);
query.exec("SET standard_conforming_strings TO true");

Но, к сожалению, это означает, что проблема скрыта от вызывающей стороны, и обратные слеши автоматически удаляются в базе данных, что может вызвать проблемы при получении данных позже.

0

По вопросам рекламы [email protected]