如何在调试期间查看Qt对象QByteArray的内容

How do I see the contents of Qt objects QByteArray during debugging?

本文关键字:对象 Qt QByteArray 调试      更新时间:2023-10-16

我的程序使用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显示为有意义的QStringascii保持为这样,特殊字符显示为十六进制代码

如果有人知道更好的方法!(这里是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

希望这能解决你的问题。