登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> CLQ工作室开源代码 >> 主题: [推荐]Qt --- printf 不即时打印信息问题 -- 以及 qt 程序无任何提示直接退出的解决     [回主站]     [分站链接]
标题
[推荐]Qt --- printf 不即时打印信息问题 -- 以及 qt 程序无任何提示直接退出的解决
clq
浏览(628) + 2022-10-13 11:31:07 发表 编辑

关键字:

[2022-11-11 20:32:42 最后更新]
[推荐]Qt --- printf 不即时打印信息问题 -- 以及 qt 程序无任何提示直接退出的解决

https://blog.csdn.net/qq_45662588/article/details/117627129

Qt --- printf 不即时打印信息问题

Qt Creator建立一个空项目,然后写了一些C代码,即使运行配置中“Run in terminal”不勾选,正常情况下打印信息会在“应用程序输出”中显示,但实际什么也输出。

#include "QDebug"
#define printf qDebug


int main(int argc, char *argv[])
{
QApplication a(argc, argv);
setbuf(stdout, NULL);//让printf立即输出
MainWindow w;
w.show();

return a.exec();
}

--------------------------------------------------------
以上其实还是不能完全解决。

一个实例是:用到了 3d 的一个程序,在某些 windows 下(服务器版本及一部老机器上都出现)无法运行成功。用命令行运行想看下有什么提示也没有内容。
而且 qt 编译出来的程序很奇怪,在命令行中运行时并不会在其实保持,而会立即从命令行中跳出直接显示 gui 。

要改变这种行为还要加上以下 3 个配置。参考 http://t.zoukankan.com/ruandahua-p-13594985.html


1:首先点开【项目】:

2:【run】中勾选 “run in terminal” :

3:pro文件添加:

#QT += datavisualization #//clq 2022
QT -= gui #//clq 2022.10
#CONFIG += QMAKE_LFLAGS_CONSOLE #//clq 2022.10
CONFIG += console #//clq 2022.10

完成,重新构建运行。

------------
另外,似乎 qt5 的 qt creator 有些问题,这时候还要在菜单中 “构建” -- “重新构建”后才起作用。

--------------------------------------------------------
另外,这时候再取消 “run in terminal” 也仍然是可以的。

--------------------------------------------------------
这时无法运行的 3d 程序会提示 opengl32sw.dll 不存在。




clq
2022-11-11 20:32:42 发表 编辑

另外,在这个过程中发现 golang 调用 qt 编译出来的程序时得到的输出内容居然和 dos 命令行中得到的不完全一样!似乎是少了点什么。
具体原因未知,先做记录以后再解决。

--------
cmd.Stdout = os.Stdout;
cmd.Stderr = os.Stderr; //可选

这两个的取值加起来都和 dos 命令行的不同。也许以下的方法可以,未测试

cmd := exec.Command(GetCurrentPath() + "/tmp1.bat");


//奇怪,一定要在它本根目录下才行,大概是因为找不到 dat 文件 //否则 dat 文件也要加全路径
////cmd.Dir = GetCurrentPath() + "/map_http_upload"; //2022.06 加上执行的工作目录,兼容性会更高
//cmd.Dir = "D:/app_map/_src_map/map_http_upload/"; //暂时写死 //注意,要把 Palettes.cb 也放到这个目录中,否则颜色不对

//这样就可以把 php 命令行的结果重定向了
//cmd.Stdout = os.Stdout;
//cmd.Stderr = os.Stderr; //可选
//cmd.Start(); //这个不会等待

//cmd.Wait(); //等待进程结束//必须要有这个,否则会立即跳过去了

//----
//创建获取命令输出管道
stdout, err := cmd.StdoutPipe();
if err != nil {
fmt.Printf("Error:can not obtain stdout pipe for command:%s\n", err)
return err.Error();
}

//执行命令
if err := cmd.Start(); err != nil {
fmt.Println("Error:The command is err,", err)
return err.Error();
}

//读取所有输出
bytes, err := ioutil.ReadAll(stdout)
if err != nil {
fmt.Println("ReadAll Stdout:", err.Error())
return err.Error();
}

if err := cmd.Wait(); err != nil {
fmt.Println("wait:", err.Error())
return err.Error();
}

fmt.Printf("stdout:\n\n %s", bytes);

//----

return string(bytes);





总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


所在合集/目录
qt的坑 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1