Как вызвать функцию c ++, используя c &&, перенаправить вывод приложения в textEdit в Qt - PullRequest
1 голос
/ 03 июня 2010

Я пытаюсь сделать пару вещей одновременно. Я пытаюсь сделать одну важную вещь: перенаправить вывод приложения, отображаемый в консоли Qt Creator, в textEdit, который есть в моем GUI. Тем не менее, класс, в котором мне нужно это сделать, написан на C, а все связанные с ним заголовки также на C. Есть ли способ, которым я могу перенаправить вывод в textEdit в классе C?

Ответы [ 5 ]

2 голосов
/ 03 июня 2010

Если вы можете изменить код C, вы можете позволить ему принимать обратный вызов так, чтобы текст отправлялся в функцию обратного вызова, а не просто печатался с printf. Например, у вас может быть что-то вроде:

void someFunctionInC
(
    /* other parameters ... */
    void (*printcallback)(const char* text, void* extra_arg),
    void* extra_arg
)
{
    /* ... */
    printcallback("Hello world\n",extra_arg); /* instead of using printf */
    /* ... */
}

Затем в C ++ можно создать обратный вызов, который возвращает параметр void * extra_arg обратно в класс и вызывает метод этого класса с заданным текстом. Другая возможность заключается в том, что вы можете использовать snprintf и создать вариант вашей функции C, которая будет печатать в строку вместо печати в стандартном формате. Обратите внимание, что все эти решения требуют, чтобы вы могли изменять данную функцию C. Если абсолютно невозможно изменить функцию C, вы можете использовать close, pipe, dup2 и т. Д., Чтобы перенаправить стандартный вывод в канал, а затем прочитать результаты из канала, но это действительно очень уродливое решение. Удачи.

1 голос
/ 03 июня 2010

Взаимодействие функций C ++ и C включает обход искажения имен, которое по умолчанию выполняется в C ++ для поддержки перегрузки функций.

Чтобы вызвать функцию C ++ из функции C, вы должны объявить функцию C ++ с помощью extern "C" квалификатора. Это дает указание компилятору оставить его имя без изменений.

Чтобы вызвать функцию C из функции C ++, вы должны прототипировать ее с extern "C" в области действия функции C ++.

1 голос
/ 03 июня 2010
0 голосов
/ 05 июня 2010

QProcess - это QIODevice. Если вы вызываете эту программу на C, вы можете использовать QProcess и читать ее вывод с помощью QProcess :: readAll * members

0 голосов
/ 04 июня 2010

Это немного устарело, но посмотрите здесь . Кажется, что QTextStream - это ответ, но в деталях я не уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...