QDebug 类

QDebug 类提供调试信息的输出流。更多...

头文件 #include <QDebug>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承 QIODeviceBase
继承者

QQmlInfo

公共类型

枚举VerbosityLevel { MinimumVerbosity, DefaultVerbosity, MaximumVerbosity }

公共函数

QDebug(QIODevice *device)
QDebug(QString *string)
QDebug(QtMsgType t)
QDebug(const QDebug &o)
~QDebug()
boolautoInsertSpaces() const
QDebug &maybeQuote(char c = '"')
QDebug &maybeSpace()
QDebug &noquote()
QDebug &nospace()
QDebug &quote()
(自 6.7) boolquoteStrings() const
QDebug &resetFormat()
voidsetAutoInsertSpaces(bool b)
(自 6.7) voidsetQuoteStrings(bool b)
voidsetVerbosity(int verbosityLevel)
QDebug &space()
voidswap(QDebug &other)
QDebug &verbosity(int verbosityLevel)
intverbosity() const
QDebug &operator<<(QChar t)
QDebug &operator<<(bool t)
QDebug &operator<<(char t)
QDebug &operator<<(short t)
QDebug &operator<<(unsigned short t)
QDebug &operator<<(char16_t t)
QDebug &operator<<(char32_t t)
QDebug &operator<<(int t)
QDebug &operator<<(unsigned int t)
QDebug &operator<<(long t)
QDebug &operator<<(unsigned long t)
QDebug &operator<<(qint64 t)
QDebug &operator<<(quint64 t)
QDebug &operator<<(float t)
QDebug &operator<<(double t)
QDebug &operator<<(const char *t)
(since 6.0) QDebug &operator<<(const char16_t *t)
QDebug &operator<<(const QString &t)
QDebug &operator<<(QStringView s)
(since 6.0) QDebug &operator<<(QUtf8StringView s)
QDebug &operator<<(QLatin1StringView t)
QDebug &operator<<(const QByteArray &t)
(since 6.0) QDebug &operator<<(QByteArrayView t)
QDebug &operator<<(const void *t)
(since 6.7) QDebug &operator<<(std::nullopt_t)
(since 6.5) QDebug &operator<<(const std::basic_string& s)
(since 6.5) QDebug &operator<<(std::basic_string_view s)
(since 6.6) QDebug &operator<<(std::chrono::duration duration)
(since 6.7) QDebug &operator<<(T i128)
(since 6.7) QDebug &operator<<(T u128)
QDebug &operator=(const QDebug &other)

静态公有成员

(since 6.0) QStringtoString(T &&object)
QDebugoperator<<(QDebug debug, const std::list& vec)
QDebugoperator<<(QDebug debug, const std::vector& vec)
QDebugoperator<<(QDebug debug, const QSet& set)
QDebugoperator<<(QDebug debug, const QMap& map)
QDebugoperator<<(QDebug debug, const QMultiMap& map)
QDebugoperator<<(QDebug debug, const std::map& map)
QDebugoperator<<(QDebug debug, const std::multimap& map)
QDebugoperator<<(QDebug debug, const QHash& hash)
QDebugoperator<<(QDebug debug, const QMultiHash& hash)
QDebugoperator<<(QDebug debug, const std::pair& pair)
QDebugoperator<<(QDebug debug, const QContiguousCache& cache)
QDebugoperator<<(QDebug debug, const QFlags& flags)
QDebugoperator<<(QDebug debug, const QList& list)
(since 6.3) QDebugoperator<<(QDebug debug, const QVarLengthArray& array)

详细描述

QDebug 在开发者需要将调试或跟踪信息写入设备、文件、字符串或控制台时使用。

基本用法

在常见情况下,调用qDebug()函数以获取用于编写调试信息的默认QDebug对象是有用的。

    qDebug() << "Date:" << QDate::currentDate();
    qDebug() << "Types:" << QString("String") << QChar('x') << QRect(0, 10, 50, 40);
    qDebug() << "Custom coordinate type:" << coordinate;

这使用接受QtMsgType值为QtDebugMsg的构造函数构建QDebug对象。同样,qWarning()、qCritical()和qFatal()函数也返回对应消息类型的QDebug对象。

这个类还提供了几种其他情况的构造函数,包括接受QFile或任何其他用于向文件和其他设备编写调试信息的QIODevice子类的构造函数。接受QString的构造函数用于将内容写入字符串进行显示或序列化。

格式化选项

QDebug格式化输出,使其易于阅读。它自动在参数之间添加空格,并为QStringQByteArrayQChar参数添加引号。

您可以通过space()、nospace()和quote()、noquote()方法调整这些选项。此外,可以将QTextStream操作符管道输入到一个QDebug流中。

QDebugStateSaver限制了格式化变化的当前作用域。resetFormat()将选项重置为默认值。

将自定义类型写入流

许多标准类型可以写入QDebug对象,Qt为大多数Qt值类型提供支持。要添加对自定义类型的支持,您需要实现流操作符,如下例所示。

QDebug operator<<(QDebug debug, const Coordinate &c)
{
    QDebugStateSaver saver(debug);
    debug.nospace() << '(' << c.x() << ", " << c.y() << ')';

    return debug;
}

这已在调试技术创建自定义Qt类型文档中描述。

成员类型文档

enum QDebug::VerbosityLevel

此枚举描述了详尽级别的范围。

常量
QDebug::MinimumVerbosity0
QDebug::DefaultVerbosity2
QDebug::MaximumVerbosity7

另请参阅详尽性()和setVerbosity()。

成员函数文档

[since 6.5] 模板 <typename Char, typename... Args> QDebug &QDebug::operator<<(const std::basic_string<Char, Args...> &s)

[since 6.5] 模板 <typename Char, typename... Args> QDebug &QDebug::operator<<(std::basic_string_view<Char, Args...> s)

将字符串或字符串视图s写入流并返回对流的引用。

这些操作符只有在以下条件成立时才参与求重载解析:

  • char
  • char8_t (C++20仅限)
  • char16_t
  • char32_t
  • wchar_t

此函数自Qt 6.5起引入。

[since 6.7] 模板 <typename T, QDebug::if_qint128<T> = true> QDebug &QDebug::operator<<(T i128)

[since 6.7] 模板 <typename T, QDebug::if_quint128<T> = true> QDebug &QDebug::operator<<(T u128)

打印128位整数的文本表示。

注意: 只有当Qt支持128位整数类型时,此运算符才可用。如果构建中提供了128位整数类型,但Qt库是在没有这个功能的情况下编译的,则运算符将打印一条警告。

注意: 因为此运算符是一个函数模板,它的参数不会进行隐式转换。它必须是恰好qint128/quint128。

此函数是从Qt 6.7引入的。

另请参阅:QT_SUPPORTS_INT128.

[explicit] QDebug::QDebug(QIODevice *device)

构造一个写入指定 device 的调试流。

[explicit] QDebug::QDebug(QString *string)

构造一个写入指定 string 的调试流。

[explicit] QDebug::QDebug(QtMsgType t)

构造一个写入消息类型 t 的处理器的调试流。

QDebug::QDebug(const QDebug &o)

构造其他调试流 o 的副本。

[noexcept] QDebug::~QDebug()

刷新所有待写入的数据并销毁调试流。

bool QDebug::autoInsertSpaces() const

如果此 QDebug 实例将自动在写入之间插入空格,则返回 true

另请参阅:setAutoInsertSpaces() 和 QDebugStateSaver.

QDebug &QDebug::maybeQuote(char c = '"')

根据当前自动插入引号的设置写入字符 c 并返回对流的引用。

默认字符是双引号 ""

另请参阅:quote() 和 noquote().

QDebug &QDebug::maybeSpace()

根据当前自动插入空格的设置写入空格字符并返回对流的引用。

另请参阅:space() 和 nospace().

QDebug &QDebug::noquote()

禁用自动插入环绕 QCharQStringQByteArray 内容的引号,并返回流引用。

当禁用引号时,这些类型将不带引号打印,且不转换非可打印字符。

另请参阅quote() 和 maybeQuote()。

QDebug &QDebug::nospace()

禁用自动插入空格并返回流引用。

另请参阅space() 和 maybeSpace()。

QDebug &QDebug::quote()

启用自动在 QCharQStringQByteArray 内容周围插入引号,并返回流引用。

默认启用引号。

另请参阅noquote() 和 maybeQuote()。

[noexcept, since 6.7] bool QDebug::quoteStrings() const

如果此 QDebug 实例将引号字符串流进入其中(默认行为),返回 true

此函数是从Qt 6.7引入的。

另请参阅QDebugStateSaverquote()、noquotesetQuoteStrings

QDebug &QDebug::resetFormat()

重置流格式选项,使其返回到初始构造状态。

另请参阅space() 和 quote

void QDebug::setAutoInsertSpaces(bool b)

如果 b 为真,则启用写入之间的自动插入空间;否则禁用自动插入空间。

另请参阅autoInsertSpacesQDebugStateSaver

[since 6.7] void QDebug::setQuoteStrings(bool b)

如果 btrue,则启用将字符串流到此 QDebug 实例时的引号;否则禁用引号。

默认为引用字符串。

此函数是从Qt 6.7引入的。

另请参阅QDebugStateSaverquote()、noquotequoteStrings

void QDebug::setVerbosity(int verbosityLevel)

将流的详细程度设置为 verbosityLevel

允许的范围是 0 到 7。默认值为 2。

另请参阅verbosity() 和 VerbosityLevel

QDebug &QDebug::space()

将空格字符写入调试流并返回流引用。

流将记住未来写入将自动插入空格。

另请参阅 nospace() 和 maybeSpace().

[noexcept] void QDebug::swap(QDebug &other)

交换此调试流实例与 other。此函数非常快速且始终不会失败。

[静态,自6.0版本起] 模板 <typename T> QString QDebug::toString(T &&object)

将对象 object 流入一个在字符串上操作的 QDebug 实例中,然后返回该字符串。

此函数在需要对象文本表示形式进行调试,但无法使用 operator<< 的情况下很有用。例如

    QTRY_VERIFY2(list.isEmpty(), qPrintable(QString::fromLatin1(
        "Expected list to be empty, but it has the following items: %1")).arg(QDebug::toString(list)));

该字符串使用 nospace 进行流操作。

此函数是在 Qt 6.0 中引入的。

QDebug &QDebug::verbosity(int verbosityLevel)

将流的详细程度设置为 verbosityLevel 并返回对流的引用。

允许的范围是 0 到 7。默认值为 2。

另请参阅 verbosity(),setVerbosity() 和 VerbosityLevel

int QDebug::verbosity() const

返回调试流的详细程度。

流操作符可以根据值检查是否需要详细输出,并根据级别打印更多信息。较高的值表示需要更多信息。

允许的范围是 0 到 7。默认值为 2。

另请参阅 setVerbosity() 和 VerbosityLevel

QDebug &QDebug::operator<<(QChar t)

将字符 t 写入流,并返回对流的引用。通常,QDebug 将控制字符和非 US-ASCII 字符打印为其 C 转义序列或其 Unicode 值(\u1234)。要打印不打印的字符而不进行转换,请启用 noquote() 功能,但请注意,一些 QDebug 后端可能不是 8 位干净的,并且可能无法表示 t

QDebug &QDebug::operator<<(bool t)

将布尔值 t 写入流,并返回对流的引用。

QDebug &QDebug::operator<<(char t)

将字符 t 写入流,并返回对流的引用。

QDebug &QDebug::operator<<(short t)

将有符号短整数 t 写入流,并返回对流的引用。

QDebug &QDebug::operator<<(unsigned short t)

将无符号短整数 t 写入流并返回流对象。

QDebug &QDebug::operator<<(char16_t t)

将 UTF-16 字符 t 写入流并返回流对象。

QDebug &QDebug::operator<<(char32_t t)

将 UTF-32 字符 t 写入流并返回流对象。

QDebug &QDebug::operator<<(int t)

将有符号整数 t 写入流并返回流对象。

QDebug &QDebug::operator<<(unsigned int t)

将无符号整数 t 写入流并返回流对象。

QDebug &QDebug::operator<<(long t)

将有符号长整数 t 写入流并返回流对象。

QDebug &QDebug::operator<<(unsigned long t)

将无符号长整数 t 写入流并返回流对象。

QDebug &QDebug::operator<<(qint64 t)

将有符号 64 位整数 t 写入流并返回流对象。

QDebug &QDebug::operator<<(quint64 t)

将无符号 64 位整数 t 写入流并返回流对象。

QDebug &QDebug::operator<<(float t)

将 32 位浮点数 t 写入流并返回流对象。

QDebug &QDebug::operator<<(double t)

将 64 位浮点数 t 写入流并返回流对象。

QDebug &QDebug::operator<<(const char *t)

将以 '\0' 结尾的 UTF-8 字符串 t 写入流并返回流对象。该字符串输出时不会被引用或转义。注意,QDebug 内部则以 UTF-16 缓冲,为了使用某些后端可能需要使用区域设置的编解码器将它们转换为 8 位,这可能会导致输出错乱(乱码)。建议限制为 US-ASCII 字符串。

[自6.0以来] QDebug &QDebug::operator<<(const char16_t *t)

将字面量终止的 UTF-16 字符串 t 写入流并返回流的引用。字符串永远不会被引号括起或转义以进行输出。注意,QDebug 按UTF-16内部缓冲,可能需要使用区域设置的编码转换为8位才能使用某些后端,这可能导致乱码输出(mojibake)。限制为US-ASCII字符串是推荐的做法。

此函数是在 Qt 6.0 中引入的。

QDebug &QDebug::operator<<(const QString &t)

将字符串 t 写入流并返回流的引用。通常,QDebug 在引号内打印字符串并将不可打印字符转换为它们的Unicode值(\u1234)。

要打印未经转换的非打印字符,请启用 noquote() 功能。注意,某些 QDebug 后端可能不保证8位清洁。

输出示例

    QString s;

    s = "a";
    qDebug().noquote() << s;    // prints: a
    qDebug() << s;              // prints: "a"

    s = "\"a\r\n\"";
    qDebug() << s;              // prints: "\"a\r\n\""

    s = "\033";                 // escape character
    qDebug() << s;              // prints: "\u001B"

    s = "\u00AD";               // SOFT HYPHEN
    qDebug() << s;              // prints: "\u00AD"

    s = "\u00E1";               // LATIN SMALL LETTER A WITH ACUTE
    qDebug() << s;              // prints: "á"

    s = "a\u0301";              // "a" followed by COMBINING ACUTE ACCENT
    qDebug() << s;              // prints: "á";

    s = "\u0430\u0301";         // CYRILLIC SMALL LETTER A followed by COMBINING ACUTE ACCENT
    qDebug() << s;              // prints: "а́"

QDebug &QDebug::operator<<(QStringView s)

将字符串视图 s 写入流并返回流的引用。通常,QDebug 在引号内打印字符串并将不可打印字符转换为它们的Unicode值(\u1234)。

要打印未经转换的非打印字符,请启用 noquote() 功能。注意,某些 QDebug 后端可能不保证8位清洁。

请参见 QString 重载的示例。

[自6.0以来] QDebug &QDebug::operator<<(QUtf8StringView s)

将字符串视图 s 写入流并返回流的引用。

通常,QDebug 在引号内打印数据并将控制或非US-ASCII字符转换为它们的C转义序列(\xAB)。这样,输出始终是7位清洁的,并且可以在需要时将字符串从输出复制并粘贴回C++源代码。

要打印未经转换的非打印字符,请启用 noquote() 功能。注意,某些 QDebug 后端可能不保证8位清洁。

此函数是在 Qt 6.0 中引入的。

QDebug &QDebug::operator<<(QLatin1StringView t)

将字符串 t 写入流并返回流的引用。通常,QDebug 在引号内打印字符串并将不可打印字符转换为它们的Unicode值(\u1234)。

要打印未经转换的非打印字符,请启用 noquote() 功能。注意,某些 QDebug 后端可能不保证8位清洁。

请参见 QString 重载的示例。

QDebug &QDebug::operator<<(const QByteArray &t)

将字节数组 t 写入流并返回流的引用。通常,QDebug 在引号内打印数组并将控制或非US-ASCII字符转换为它们的C转义序列(\xAB)。这样,输出始终是7位清洁的,并且可以在需要时将字符串从输出复制并粘贴回C++源代码。

要打印未经转换的非打印字符,请启用 noquote() 功能。注意,某些 QDebug 后端可能不保证8位清洁。

输出示例

    QByteArray ba;

    ba = "a";
    qDebug().noquote() << ba;    // prints: a
    qDebug() << ba;              // prints: "a"

    ba = "\"a\r\n\"";
    qDebug() << ba;              // prints: "\"a\r\n\""

    ba = "\033";                 // escape character
    qDebug() << ba;              // prints: "\x1B"

    ba = "\xC3\xA1";
    qDebug() << ba;              // prints: "\xC3\xA1"

    ba = QByteArray("a\0b", 3);
    qDebug() << ba               // prints: "\a\x00""b"

注意,QDebug 需要以C和C++语言连接字符串字面量的方式关闭和重新打开字符串,以便字母 'b' 不会被解释为前一个十六进制转义序列的一部分。

[since 6.0] QDebug &QDebug::operator<<(QByteArrayView t)

将观察到的字节数据 t 写入流,并返回流的引用。

通常,QDebug 在引号内打印数据并将控制或非US-ASCII字符转换为它们的C转义序列(\xAB)。这样,输出始终是7位清洁的,并且可以在需要时将字符串从输出复制并粘贴回C++源代码。

要打印未经转换的非打印字符,请启用 noquote() 功能。注意,某些 QDebug 后端可能不保证8位清洁。

请参阅 QByteArray 重载的示例。

此函数是在 Qt 6.0 中引入的。

QDebug &QDebug::operator<<(const void *t)

将指针 t 写入流,并返回流的引用。

[since 6.7] QDebug &QDebug::operator<<(std::nullopt_t)

将 nullopt 写入流。

此函数是从Qt 6.7引入的。

[since 6.6] 模板 <typename Rep, typename Period> QDebug &QDebug::operator<<(std::chrono::duration<Rep, Period> duration)

将时间长度 duration 打印到流中,并返回流的引用。打印的字符串是周期的数字表示形式外加时间单位,类似于C++标准库使用 std::ostream 产生的结果。

单位未本地化。

此功能自 Qt 6.6 开始引入。

QDebug &QDebug::operator=(const QDebug &other)

other 调试流赋值到此流,并返回对此流的引用。

相关非成员

模板 <typename T, typename Alloc> QDebug operator<<(QDebug debug, const std::list<T, Alloc> &vec)

将列表 vec 的内容写入 debug。需要 T 支持流进 QDebug

模板 <typename T, typename Alloc> QDebug operator<<(QDebug debug, const std::vector<T, Alloc> &vec)

将向量 vec 的内容写入 debug。需要 T 支持流进 QDebug

模板 <typename T> QDebug operator<<(QDebug debug, const QSet<T> &set)

set 的内容写入 debug。需要 T 支持流进 QDebug

模板 <typename Key, typename T> QDebug operator<<(QDebug debug, const QMap<Key, T> &map)

map 的内容写入 debug。需要 KeyT 都支持流进 QDebug

模板 <typename Key, typename T> QDebug operator<<(QDebug debug, const QMultiMap<Key, T> &map)

map 的内容写入 debug。需要 KeyT 都支持流进 QDebug

模板 <typename Key, typename T, typename Compare, typename Alloc> QDebug operator<<(QDebug debug, const std::map<Key, T, Compare, Alloc> &map)

map 的内容写入 debug。需要 KeyT 都支持流进 QDebug

模板 <typename Key, typename T, typename Compare, typename Alloc> QDebug operator<<(QDebug debug, const std::multimap<Key, T, Compare, Alloc> &map)

map 的内容写入 debug。需要 KeyT 都支持流进 QDebug

模板 <typename Key, typename T> QDebug operator<<(QDebug debug, const QHash<Key, T> &hash)

hash 的内容写入 debug。这两个 KeyT 都需要支持流式写入到 QDebug

模板 <typename Key, typename T> QDebug operator<<(QDebug debug, const QMultiHash<Key, T> &hash)

hash 的内容写入 debug。这两个 KeyT 都需要支持流式写入到 QDebug

模板 <typename T1, typename T2> QDebug operator<<(QDebug debug, const std::pair<T1, T2> &pair)

pair 的内容写入 debug。这两个 T1T2 都需要支持流式写入到 QDebug

模板 <typename T> QDebug operator<<(QDebug debug, const QContiguousCache<T> &cache)

cache 的内容写入 debug。类型 T 需要支持流式写入到 QDebug

模板 <typename T> QDebug operator<<(QDebug debug, const QFlags<T> &flags)

flags 写入 debug

模板 <typename T> QDebug operator<<(QDebug debug, const QList<T> &list)

list 的内容写入到 debug 中。 T 需要支持将数据流向 QDebug

[since 6.3] 模板 <typename T, qsizetype P> QDebug operator<<(QDebug debug, const QVarLengthArray<T, P> &array)

array 的内容写入到 debug 中。 T 需要支持将数据流向 QDebug

此功能自 Qt 6.3 版本引入。

© 2024 Qt 公司。包含在此处的文档贡献的版权归属各自所有者。此处提供的文档受 GNU 自由文档许可协议版本 1.3 的条款约束,由自由软件基金会发布。Qt 及其相关标志是芬兰及/或其他国家的 The Qt Company Ltd. 的商标。所有其他商标都是各自所有者的财产。