我試圖一次做幾件事。我正在嘗試做一件重要的事情:將Qt Creator控制檯中顯示的應用程序輸出重定向到我在GUI上的文本編輯器。然而,我需要這樣做的類是用C語言編寫的,它的所有相關頭文件也都用C語言編寫。有沒有辦法可以將輸出重定向到C類中的textEdit?如何調用C++函數使用c &&重定向應用程序輸出到Qt中的文本編輯
1
A
回答
1
2
如果你可以修改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++中,創建鑄無效* extra_arg參數恢復到類,並調用給定文本類的方法的回調。另一種可能性是您可以使用snprintf並創建C函數的變體,該函數將打印到字符串而不是打印到標準輸出。請注意,這些解決方案都要求您能夠修改給定的C函數。如果絕對不可能修改C函數,那麼可以使用close,pipe,dup2等將stdout重定向到管道,然後從管道讀回結果,但這確實是一個非常糟糕的解決方案。祝你好運。
1
C++和C函數的接口涉及解決在C++中默認發生的名稱改變以支持函數重載。
要從C函數調用C++函數,必須聲明C++函數extern「C」限定符。這指示編譯器將其名稱保持不變。
要從C++函數中調用C函數,必須在C++函數的範圍內使用extern「C」進行原型設計。
0
這是有點老,但看看here。這似乎是QTextStream
是答案,但具體我不確定。
0
QProcess是QIODevice。如果您正在調用此C程序,您可以使用QProcess並使用QProcess :: readAll *成員讀取它的輸出
相關問題
- 1. 如何調試帶重定向輸出的Delphi應用程序
- 2. 如何在C/C++中將系統調用的輸出重定向到程序中?
- 3. 允許用戶在C#asp.net應用程序中編輯文本
- 4. 在Qt應用程序(wndproc)中使用winapi和opengl函數(C++)
- 5. 打印Qt C++輸出到用QML編寫的應用程序屏幕
- 6. 在Linux下使用bash腳本將C程序的輸出重定向到另一個C程序
- 7. qDebug Qt控制檯應用程序輸出到Qt Creator應用程序輸出
- 8. C編程調用函數
- 9. 如何將程序輸出重定向到文本文件
- 10. 從C程序中調用C++函數
- 11. 如何將被調用程序的輸出重定向到文件?
- 12. 在Web應用程序中使用JavaScript調用C#函數
- 13. 在C#控制檯應用程序中編輯文本?
- 14. PSExec:將C#控制檯應用程序輸出重定向到窗口/ Diagnostics.Process?
- 15. 在C++程序中使用C函數; 「多重定義」錯誤
- 16. C程序如何調用Perl函數?
- 17. 重定向execvp的輸出到一個文件用C
- 18. C#編譯器如何決定發出可重定向的程序集引用?
- 19. 使用C#應用程序添加和編輯XML文件
- 20. 彙編程序和C++輸出文本
- 21. 調用用g ++編譯的庫的C/C++函數,用gcc編譯的程序
- 22. 使用C#程序的選擇輸出到其他C#程序
- 23. 重定向編譯器輸出到Win32程序
- 24. 重定向C文件輸出到一個文本文件
- 25. 如何在使用-c標誌時重定向Dtrace輸出?
- 26. 如何使用PERL XS調用STL中的C++函數向量
- 27. 如何從c#應用程序調用jquery函數?
- 28. 如何將命令的輸出重定向到圖形文本編輯器
- 29. 如何從Sublime文本編輯器調試Java應用程序
- 30. 試圖清除QT C++中的文本編輯框(使用QT Creator)
C沒有類 - 您能否更改您的問題並更好地解釋您正在嘗試執行的操作? – 2010-06-03 18:33:17
您的術語有點混亂。你在C上有一堂課? – 2010-06-03 18:33:25
我想在我的GUI上將stdout重定向到我的textarea。我的項目全部使用C++(因爲它是Qt)。但是,我需要的輸出是由printf在C類(而不是C++)中調用的。我需要一種方法來訪問C類中的textarea,以重定向stdout。 – 2010-06-03 21:48:31