qt - qDebug() 如何打印枚举值?

标签 qt

我们的应用程序中有一段简单的代码:

void tAccessPoint::OnStateChanged(QAbstractSocket::SocketState state)
{
    qDebug() << m_ID << " " << state;

由于这里不重要的原因,我试图替换 qDebug 的使用,所以我使用了这篇文章中的代码 C++ format macro / inline ostringstream .但我很惊讶地发现,当我这样做时状态不再显示为文本值,而是显示为数字值。 qDebug() 似乎知道枚举值的名称,而不仅仅是值。它是如何做到这一点的,我可以在我的代码中做到这一点吗?

最佳答案

这里没有 moc 魔法,QtNetwork 在 network/socket/qabstractsocket.h 中明确定义了操作符:

QDebug operator<<(QDebug, QAbstractSocket::SocketState) {
    switch (state) {
    case QAbstractSocket::UnconnectedState:
        debug << "QAbstractSocket::UnconnectedState";
        break;
    case QAbstractSocket::HostLookupState:
        debug << "QAbstractSocket::HostLookupState";
        break;
    case QAbstractSocket::ConnectingState:
        debug << "QAbstractSocket::ConnectingState";
        break;
    case QAbstractSocket::ConnectedState:
        debug << "QAbstractSocket::ConnectedState";
        break;
    case QAbstractSocket::BoundState:
        debug << "QAbstractSocket::BoundState";
        break;
    ...
    return debug;
}

但是你可以使用 QDebug将数据发送到 QString在你的函数中:
 QString output;
 QDebug(&output) << ...

关于qt - qDebug() 如何打印枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12174666/

相关文章:

c++ - 如何在 Linux unsing QProcess 下执行 shell 命令?

python - 将 C++ 类移植到 PyQt

c++ - Qt ASCII转IP函数

c++ - 使用 drawComplexControl 检索 QSliderHandle 图像

c++ - Qt - RegExp 无法正常工作

macos - Qt + cocoa : Undefined symbols for architecture x86_64

python - 在 Python 中返回一个角色中的对象并在 QML 中获取另一个对象的引用

c++ - 在雷达图像上绘制区域而不是点

c++ - 在 Qt 中禁用 setGraphicsEffect 继承

c++ - 将变量或 QString 传递给 SLOT(function()) C++ 中的函数