- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在搜索了 qDebug() 语句在 Qt 的标准消息处理程序中正常工作但在我切换到我自己的时失败的原因之后,我在这里呼吁看看是否有其他人有任何解决此问题的经验。
我知道/尝试过的事情,但无济于事......
1) CONFIG += console
2) DEFINES -= QT_NO_WARNING_OUTPUT QT_NO_DEBUG_OUTPUT
3) ::fprintf(stderr, "ERROR\n"); ::fflush(stderr);
4) ::fprintf(stdout, "OUTPUT\n"); ::fflush(stdout);
5) std::cerr << "CERROR" << std::endl; std::cerr.flush();
但是在使用内置处理程序时它可以正常工作(即,它将消息打印到 QtCreator 控制台)
int main(int argc, char *argv[]) {
// Use my handler
qInstallMessageHandler(MyCustomLogger);
qDebug() << "Not Printed";
// Use standard handler
qInstallMessageHandler(0);
qDebug() << "Correctly Printed";
// Use my handler again
qInstallMessageHandler(MyCustomLogger);
qDebug() << "Not Printed Again...";
}
最近的测试是使用 WinAPI 命令为自己分配一个控制台,这会导致正确的行为,所有输出到 stderr 和 stdout 在我创建的控制台上都是可见的。但是,这不是我想要的行为,我希望能够在 QtCreator 中查看此输出。
关于标准消息处理程序如何打印到调试器的任何想法?我还没有在 Qt 源代码中找到它。
最佳答案
正如 Frank Osterfeld 在他的评论中提到的:
On windows, qDebug() uses the debug channel, not stderr.
在深入研究 QDebug 代码和 QMessageLogger 之后,我找到了答案。方便的 WinAPI 函数 OutputDebugString
.
用法(改编自peppe's):
#include <QApplication>
#include <QtDebug>
#include <QtGlobal>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
void MyMessageOutput(QtMsgType Type, const QMessageLogContext& Context, const QString &Message)
{
OutputDebugString(reinterpret_cast<const wchar_t *>(Message.utf16()));
}
int main(int argc, char **argv)
{
// A GUI application
QApplication app(argc, argv);
// Custom handler
qInstallMessageHandler(myMessageOutput);
qDebug() << "Printed in the console using my message handler in a windows GUI application";
// Default handler
qInstallMessageHandler(0);
qDebug() << "Also printed in the console!";
// Show GUI here
//MainForm *MF = new MainForm();
//MF->show();
return app.exec();
}
关于c++ - Qt5 如何将 qDebug() 语句重定向到 Qt Creator 2.6 控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643293/
我尝试将 Qt 与 CLion 一起使用。我的问题是 qDebug() 不打印任何内容,但 qInfo()、qWarning()、qCritical() 和 qFatal() 效果很好。这是我的示例代
我们的应用程序中有一段简单的代码: void tAccessPoint::OnStateChanged(QAbstractSocket::SocketState state) { qDebug
我正在尝试使用 QDebug 以十六进制格式显示一个数字。下面是我写的代码。它正在工作,但输出的字符串内容用双引号括起来: 如何删除这些引号? m_CanMsg_ptr->id = 0x720; m_
我一直在调试一个简单的目录应用程序,这个问题开始困扰我。我想创建一个模式对话框,它将接收用户对所显示数据的输入。我有一个简单的结构来保存目录项数据: struct ItemData { int
在我的测试用例中,我想断言 qDebug() 的输出包含某个字符串。例如,这是我的测试的样子。注意 qdebug 输出的“绑定(bind)到 UDP 端口 34772”。我可以从我的测试函数中测试子字
我只是尝试使用 qDebug 打印一个数字,如下所示: qDebug() << QString::number(03001); 但结果是: "1537" 如果我尝试在没有第一个零的情况下打印: qDe
通常当我需要调试某些东西时,使用 qDebug() 打印一些东西比使用调试器逐步调试更容易。问题是 qDebug() 的输出有时根本不显示!与 qWarning 和 qCritical 相同。奇怪的是
我正在使用 C++/Qt 打印函数 qDebug,但有时我想控制如何附加“、空格和换行符并且不使用默认的 qDebug。 我们举个简单的例子: QString var1("some string");
qDebug() 是线程安全的吗?我所说的线程安全不仅仅是指不崩溃,而且如果我从不同的线程调用 qDebug() ,输出是否可能会混淆?我用这段代码对其进行了测试,但似乎并非如此,但是,我在他们谈论这
我在 Qt 5.3.1 中构建了一个 QWidgets 应用程序,并且在某些地方使用了 qDebug() 为了测试这个问题,我构建了一个准系统 QWidgets 应用程序(属于 QMainWindo
我正在使用 qDebug()、qInfo() 等结合 qInstallMessageHandler 来编写我的日志文件。在执行我的应用程序时,我还在批处理屏幕上获得了输出。 我只找到了 QT_NO_D
我想将 qDebug() 输出保留在日志文件中并将其显示在控制台上,我试过这个: qDebug() << "Hand's up!"; QTextStream stream(stdout); QText
我在整个代码中都使用了 qDebug。现在我想通过翻译单元限制它的输出,定义一个单独的宏来启用/禁用翻译单元中的 qDebug 输出: 测试.pro: DEFINES += NO_DEBUG_ONE
我写了一个用于测试数据库连通性的 qt 小型控制台实用程序,代码块是: db.setHostName("hostIP"); db.setDatabaseName("name"); db.s
我见过一些使用 qDebug 的 Qt 代码,就好像它是 printf() qDebug( format, ... ); 大多数时候我看到它像 std::cout 一样使用 qDebug() << "
qDebug()可以输出二进制格式的数据吗? 例如,我想检查一些状态变化: unsigned char status; ... qDebug() << "Status: " << status; 我想
我想使用 qDebug()、qInfo() 等具有自定义默认浮点精度和数字格式的函数。 有没有办法在全局范围内定义它? 想象一下: double num = 1.2; qDebug() << "My
我尽量避免在 QT 程序中混合 QString 和 char* 类型。我有一个对话函数,它返回 QString 中的数据指针,但我得到了非常奇怪的结果。这段代码有什么问题? 编译器及环境 gcc (D
我一直想知道是否可以使用 Qt C++ 中的 qDebug() 语句收集用户输入。 我试着像在标准 C++ 代码中那样做: qDebug() >> myvar; 但是没有用。 如何使用 Qt 从 st
我有一个 QByteArray 来存储从 GPS 接收到的数据,该数据部分是二进制,部分是 ASCII。我想知道调试建议知道收到了什么,所以我正在写一个 qDebug 像这样: //QByteArra
我是一名优秀的程序员,十分优秀!