• 8012阅读
  • 5回复

这个怎么实现?把底层库的printf 在QtextEdit输出出来。 [复制链接]

上一主题 下一主题
离线cyberpunker
 

只看楼主 倒序阅读 楼主  发表于: 2014-04-21

   用C写的程序,命令窗口的,我现在想在外边加个QT的壳子,原来的C程序封装成一个库,

  现在的问题是,想把原来用程序中用printf打印输出的信息在GUI上的QtextEdit中输出,作为log 信息一样,
  
  QT有什么机制能实现这个吗?

  谢谢,



离线dbzhang800

只看该作者 1楼 发表于: 2014-04-21
离线cyberpunker

只看该作者 2楼 发表于: 2014-04-30
回 dbzhang800 的帖子
dbzhang800:http://blog.debao.me/2013/07/redirect-current-processs-stdout-to-a-widget-such-as-qtextedit/ (2014-04-21 11:19)


已经用上了,

但是有个问题, 好像有个缓冲,得充满才发过来,不能实时接收到


离线cyberpunker

只看该作者 3楼 发表于: 2014-05-05
回 dbzhang800 的帖子
dbzhang800:http://blog.debao.me/2013/07/redirect-current-processs-stdout-to-a-widget-such-as-qtextedit/ (2014-04-21 11:19) 

http://blog.debao.me/2013/07/redirect-current-processs-stdout-to-a-widget-such-as-qtextedit/#disqus_thread

我现在有个重定向的问题,看到了您给的链接,反复看了下,基本也明白了原理,但是用在我的工程里边还是还是有问题。

我原来是在一个 static lib 里 使用了 printf 函数 方便调试,

现在我在外边加了个QT的界面,通过界面调用 这个lib , 我希望能把lib 里的 printf 在GUI上显示出来,

使用了您写的这个重定向的类,但是时灵时不灵,
不灵的时候怎么都没有输出。
灵的时候也有很大的延迟,好像是有个缓冲,像个fifo一样,必须要往缓冲里填入足够的信息,才会在界面上打印出来,

不知道您自己遇到过这个情况没有?是怎么解决的?

谢谢。
离线dbzhang800

只看该作者 4楼 发表于: 2014-05-05
我没真正用过这个东西,只不过是当时有人在qt-project 的forum 中问到这个问题,我便查了些东西,写了写。仅此而已。

至于你提到的缓冲,这属于另一个问题。 你需要了解,同样是一个printf() ,当它直接输出到控制台,和使用管道或重定向时,效果是不一样的。输出到控制台时,它是行缓冲的,即遇到换行符,就会自动flush,而使用管道或重定向后,就是全缓冲模式了。

对于比较严谨的控制台程序,在需要刷新时,都应该手动调用fflush() 函数 或 std::flush 算子。

另外,你也可以试试手动设置你程序的缓冲模式 setvbuf()
离线cyberpunker

只看该作者 5楼 发表于: 2014-05-07
回 dbzhang800 的帖子
dbzhang800:我没真正用过这个东西,只不过是当时有人在qt-project 的forum 中问到这个问题,我便查了些东西,写了写。仅此而已。
至于你提到的缓冲,这属于另一个问题。 你需要了解,同样是一个printf() ,当它直接输出到控制台,和使用管道或重定向时,效果是不一样的。输出到控制台时,它 .. (2014-05-05 16:55) 



  应该是用 fflush(NULL)  搞定了,

谢谢。



快速回复
限100 字节
 
上一个 下一个