我正在使用Qt4和C++在计算机图形学中制作一些程序.我需要能够在运行时在我的控制台中打印一些变量,而不是调试,但cout
即使添加库也似乎不起作用.有没有办法做到这一点?
Goz*_*Goz 188
如果打印到足够好stderr
,您可以使用以下用于调试的流:
#include<QDebug>
//qInfo is qt5.5+ only.
qInfo() << "C++ Style Info Message";
qInfo( "C Style Info Message" );
qDebug() << "C++ Style Debug Message";
qDebug( "C Style Debug Message" );
qWarning() << "C++ Style Warning Message";
qWarning( "C Style Warning Message" );
qCritical() << "C++ Style Critical Error Message";
qCritical( "C Style Critical Error Message" );
// qFatal does not have a C++ style method.
qFatal( "C Style Fatal Error Message" );
Run Code Online (Sandbox Code Playgroud)
虽然在评论中指出,但请记住,如果QT_NO_DEBUG_OUTPUT
定义了qDebug消息,则会删除它们
如果你需要stdout,你可以尝试这样的事情(正如Kyle Strand指出的那样):
QTextStream& qStdOut()
{
static QTextStream ts( stdout );
return ts;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以调用如下:
qStdOut() << "std out!";
Run Code Online (Sandbox Code Playgroud)
Cap*_*liC 147
我发现这个最有用:
#include <QTextStream>
QTextStream out(stdout);
foreach(QString x, strings)
out << x << endl;
Run Code Online (Sandbox Code Playgroud)
Kyl*_*and 34
stdout
如果你想要一些东西,比如std::cout
写入你的应用程序的标准输出,你可以简单地做以下事情(归功于CapelliC):
QTextStream(stdout) << "string to print" << endl;
Run Code Online (Sandbox Code Playgroud)
如果你想避免创建一个临时QTextStream
对象,请在下面的评论中按照Yakk的建议创建一个函数来返回一个static
句柄stdout
:
inline QTextStream& qStdout()
{
static QTextStream r{stdout};
return r;
}
...
foreach(QString x, strings)
qStdout() << x << endl;
Run Code Online (Sandbox Code Playgroud)
记得到flush
流周期性地,以确保实际打印输出.
stderr
注意,上述技术也可用于其他输出.但是,有更多可读的方法可以写入stderr
(归功于Goz和他的回答下面的评论):
qDebug() << "Debug Message"; // CAN BE REMOVED AT COMPILE TIME!
qWarning() << "Warning Message";
qCritical() << "Critical Error Message";
qFatal("Fatal Error Message"); // WILL KILL THE PROGRAM!
Run Code Online (Sandbox Code Playgroud)
qDebug()
如果QT_NO_DEBUG_OUTPUT
在编译时打开,则关闭.
(Goz在评论中指出,对于非控制台应用程序,这些应用程序可以打印到不同的流stderr
.)
注意:所有Qt打印方法都假定const char*
参数是带有终止\0
字符的ISO-8859-1编码字符串.
Kyl*_*utz 30
将其添加到项目文件中:
CONFIG += console
Run Code Online (Sandbox Code Playgroud)
Seb*_*zus 17
你想要打印什么变量?如果你的意思是QStrings,那些需要转换为c-Strings.尝试:
std::cout << myString.toAscii().data();
Run Code Online (Sandbox Code Playgroud)
小智 8
转到项目Properties -> Linker-> System -> SubSystem
,然后将其设置为Console(/S)
.
它也有类似于prinft的语法,例如:
qDebug ("message %d, says: %s",num,str);
Run Code Online (Sandbox Code Playgroud)
非常方便
包含iostream 库并精确地说cout是std的对象怎么样:
#include <iostream>
std::cout << "Hello" << std::endl;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
251881 次 |
最近记录: |