如何在调试期间查看Qt对象QByteArray的内容
How do I see the contents of Qt objects QByteArray during debugging?
我的程序使用QByteArray类型的一些变量来包含数据(字节)。这些字节可能是特殊字符,如"\0"、1、。。。所以在调试时,我无法看到特殊字符后的所有元素。如果我使用std::vector,我可以看到所有元素。我必须使用QByteArray,但在调试时无法看到该变量的所有元素。帮帮我!谢谢
示例:QByteArray字节(4,'\0');现在,如果进行调试,我只看到"。但我想看"'\0','\0'、'\0'和'\0'"之类的东西。
我对QDateTime也有同样的问题。但我通过这个帮助下决心:http://www.qtcentre.org/threads/32336-View-QDate-and-QDateTime-in-VisualStudio-debugger
此链接可能有帮助,但不能解决我的问题:http://qt-project.org/wiki/IDE-debug-helpers
示例:
QByteArray ba("Hello"); //debuging, see: ba = "Hello"
ba.append(' ');
ba.append("a message"); //we just see: ba = "Hello"
我在这里贡献了一段我必须写的代码,因为我找不到任何方法来做类似的事情:以python的方式将QByteArray显示为有意义的QString:ascii保持为这样,特殊字符显示为十六进制代码。
如果有人知道更好的方法!(这里是QT 4.6)
QString toDebug(const QByteArray & line) {
QString s;
uchar c;
for ( int i=0 ; i < line.size() ; i++ ){
c = line[i];
if ( c >= 0x20 and c <= 126 ) {
s.append(c);
} else {
s.append(QString("<%1>").arg(c, 2, 16, QChar('0')));
}
}
return s;
}
例如:
QByteArray a;
a.append("et");
a.append(' ');
a.append("voilà");
qDebug() << toDebug(QByteArray(a));
退货:
"et<00>voil<e0>"
对于调试,您可以将QBytearray转换为QString并查看输出。
例如:
QByteArray bArray;
QString str = "";
str.append(bArray);
QDebug() << str ; // this will display the content in your console/application output window
希望这能解决你的问题。
相关文章:
- 如何在QT Creator上将QWidget声明为继承类的对象
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- Qt:从另一个窗口访问公共对象
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 如何在qt中将对象添加到现有布局中?--已解决
- 如何注册Qt C++对象以在QML中使用它
- 如何在Qt中连接来自不同窗口的两个对象?
- 将对象传递给多线程对象 Qt
- Qt:如何通知对象已建立涉及它的信号槽连接
- Qt访问每个类中的查看器对象?
- Qt调试:我如何知道QCoreApplication::notifyInternal2正在向哪个对象发送消息?
- Qt c++不会为所有对象调用move_slot.为什么?
- Qt对象所有权内存泄漏
- CMake + Qt,moc 编译失败,无法实现 QMetaObject 方法(编译器找不到基本 ui 对象的标头?
- 在Qt中执行完所有插槽后,如何释放对象
- 两个对象QT之间的示例插槽/信号
- 使用派生的类对象 Qt 访问基类信号
- 堆栈对象Qt信号和参数作为参考
- 重用QProcess对象(Qt 4.8)
- QWebEngine & QWebChannel:传输对象"qt.webChannelTransport"在页面重新加载后消失