QDebug 类
QDebug 类提供调试信息的输出流。更多...
头文件 | #include <QDebug> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
继承 | QIODeviceBase |
继承者 |
- 包括继承成员在内的所有成员列表
- QDebug 是 隐式共享类 的一部分。
公共类型
枚举 | VerbosityLevel { MinimumVerbosity, DefaultVerbosity, MaximumVerbosity } |
公共函数
QDebug(QIODevice *device) | |
QDebug(QString *string) | |
QDebug(QtMsgType t) | |
QDebug(const QDebug &o) | |
~QDebug() | |
bool | autoInsertSpaces() const |
QDebug & | maybeQuote(char c = '"') |
QDebug & | maybeSpace() |
QDebug & | noquote() |
QDebug & | nospace() |
QDebug & | quote() |
(自 6.7) bool | quoteStrings() const |
QDebug & | resetFormat() |
void | setAutoInsertSpaces(bool b) |
(自 6.7) void | setQuoteStrings(bool b) |
void | setVerbosity(int verbosityLevel) |
QDebug & | space() |
void | swap(QDebug &other) |
QDebug & | verbosity(int verbosityLevel) |
int | verbosity() 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 |
(since 6.5) QDebug & | operator<<(std::basic_string_view |
(since 6.6) QDebug & | operator<<(std::chrono::duration |
(since 6.7) QDebug & | operator<<(T i128) |
(since 6.7) QDebug & | operator<<(T u128) |
QDebug & | operator=(const QDebug &other) |
静态公有成员
(since 6.0) QString | toString(T &&object) |
相关非成员
QDebug | operator<<(QDebug debug, const std::list |
QDebug | operator<<(QDebug debug, const std::vector |
QDebug | operator<<(QDebug debug, const QSet |
QDebug | operator<<(QDebug debug, const QMap |
QDebug | operator<<(QDebug debug, const QMultiMap |
QDebug | operator<<(QDebug debug, const std::map |
QDebug | operator<<(QDebug debug, const std::multimap |
QDebug | operator<<(QDebug debug, const QHash |
QDebug | operator<<(QDebug debug, const QMultiHash |
QDebug | operator<<(QDebug debug, const std::pair |
QDebug | operator<<(QDebug debug, const QContiguousCache |
QDebug | operator<<(QDebug debug, const QFlags |
QDebug | operator<<(QDebug debug, const QList |
(since 6.3) QDebug | operator<<(QDebug debug, const QVarLengthArray |
详细描述
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格式化输出,使其易于阅读。它自动在参数之间添加空格,并为QString、QByteArray、QChar参数添加引号。
您可以通过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; }
成员类型文档
enum QDebug::VerbosityLevel
此枚举描述了详尽级别的范围。
常量 | 值 |
---|---|
QDebug::MinimumVerbosity | 0 |
QDebug::DefaultVerbosity | 2 |
QDebug::MaximumVerbosity | 7 |
另请参阅详尽性()和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 并返回对流的引用。
默认字符是双引号 ""
。
QDebug &QDebug::maybeSpace()
根据当前自动插入空格的设置写入空格字符并返回对流的引用。
QDebug &QDebug::noquote()
禁用自动插入环绕 QChar、QString 和 QByteArray 内容的引号,并返回流引用。
当禁用引号时,这些类型将不带引号打印,且不转换非可打印字符。
另请参阅quote() 和 maybeQuote()。
QDebug &QDebug::nospace()
禁用自动插入空格并返回流引用。
另请参阅space() 和 maybeSpace()。
QDebug &QDebug::quote()
启用自动在 QChar、QString 和 QByteArray 内容周围插入引号,并返回流引用。
默认启用引号。
另请参阅noquote() 和 maybeQuote()。
[noexcept, since 6.7]
bool QDebug::quoteStrings() const
如果此 QDebug 实例将引号字符串流进入其中(默认行为),返回 true
。
此函数是从Qt 6.7引入的。
另请参阅QDebugStateSaver、quote()、noquote 和 setQuoteStrings。
QDebug &QDebug::resetFormat()
重置流格式选项,使其返回到初始构造状态。
void QDebug::setAutoInsertSpaces(bool b)
如果 b 为真,则启用写入之间的自动插入空间;否则禁用自动插入空间。
另请参阅autoInsertSpaces 和 QDebugStateSaver。
[since 6.7]
void QDebug::setQuoteStrings(bool b)
如果 b 为 true
,则启用将字符串流到此 QDebug 实例时的引号;否则禁用引号。
默认为引用字符串。
此函数是从Qt 6.7引入的。
另请参阅QDebugStateSaver、quote()、noquote 和 quoteStrings。
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。需要 Key
和 T
都支持流进 QDebug。
模板 <typename Key, typename T> QDebug operator<<(QDebug debug, const QMultiMap<Key, T> &map)
将 map 的内容写入 debug。需要 Key
和 T
都支持流进 QDebug。
模板 <typename Key, typename T, typename Compare, typename Alloc> QDebug operator<<(QDebug debug, const std::map<Key, T, Compare, Alloc> &map)
将 map 的内容写入 debug。需要 Key
和 T
都支持流进 QDebug。
模板 <typename Key, typename T, typename Compare, typename Alloc> QDebug operator<<(QDebug debug, const std::multimap<Key, T, Compare, Alloc> &map)
将 map 的内容写入 debug。需要 Key
和 T
都支持流进 QDebug。
模板 <typename Key, typename T> QDebug operator<<(QDebug debug, const QHash<Key, T> &hash)
将 hash 的内容写入 debug。这两个 Key
和 T
都需要支持流式写入到 QDebug。
模板 <typename Key, typename T> QDebug operator<<(QDebug debug, const QMultiHash<Key, T> &hash)
将 hash 的内容写入 debug。这两个 Key
和 T
都需要支持流式写入到 QDebug。
模板 <typename T1, typename T2> QDebug operator<<(QDebug debug, const std::pair<T1, T2> &pair)
将 pair 的内容写入 debug。这两个 T1
和 T2
都需要支持流式写入到 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. 的商标。所有其他商标都是各自所有者的财产。