如何使用 c && 调用 c++ 函数将应用程序输出重定向到 Qt 中的 textEdit
Posted
技术标签:
【中文标题】如何使用 c && 调用 c++ 函数将应用程序输出重定向到 Qt 中的 textEdit【英文标题】:How to call a c++ function using c && redirect application output to textEdit in Qt 【发布时间】:2010-06-03 18:30:38 【问题描述】:我正在尝试同时做几件事。我正在尝试做一件主要的事情:将 Qt Creator 控制台中显示的应用程序输出重定向到我的 GUI 上的 textEdit。但是,我需要在其中执行此操作的类是用 C 编写的,并且它的所有相关标头也在 C 中。有没有办法可以将输出重定向到 C 类中的 textEdit 中?
【问题讨论】:
C 没有课程 - 你能改写你的问题并更好地解释你想要做什么吗? 您的术语有点混乱。你有 C 的课吗? 我正在尝试将标准输出重定向到我的 GUI 上的文本区域。我的项目都是 C++(因为它是 Qt)。但是,我需要的输出是由 C 类(不是 C++)中的 printf 调用的。我需要一种能够访问 C 类中的 textarea 以重定向标准输出的方法。 【参考方案1】:如果您可以修改 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 等将 stdout 重定向到管道,然后从管道读回结果,但这是一个非常非常丑陋的解决方案。祝你好运。
【讨论】:
【参考方案2】:见http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.8
【讨论】:
【参考方案3】:接口 C++ 和 C 函数涉及解决 C++ 中默认发生的名称修改以支持函数重载。
要从 C 函数调用 C++ 函数,您必须使用 extern "C" 限定符声明 C++ 函数。这会指示编译器保持其名称不变。
要从 C++ 函数调用 C 函数,您必须在 C++ 函数范围内使用 extern "C" 对其进行原型化。
【讨论】:
【参考方案4】:这有点老了,但是看看here。似乎QTextStream
是答案,但具体我不确定。
【讨论】:
【参考方案5】:QProcess 是 QIODevice。如果您正在调用这个 C 程序,您可以使用 QProcess 并使用 QProcess::readAll* 成员从中读取它的输出
【讨论】:
以上是关于如何使用 c && 调用 c++ 函数将应用程序输出重定向到 Qt 中的 textEdit的主要内容,如果未能解决你的问题,请参考以下文章