Qt qDebug()如何打印枚举值?

Qt qDebug()如何打印枚举值?,qt,Qt,我们的应用程序中有一段简单的代码: void tAccessPoint::OnStateChanged(QAbstractSocket::SocketState state) { qDebug() << m_ID << " " << state; void tAccessPoint::OnStateChanged(QAbstractSocket::SocketState状态) { qDebug()这里没有moc魔术,QtNetwork在network

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

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

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;
}

可能此枚举到QString转换非常有用:

const QMetaObject & mo = QAbstractSocket::staticMetaObject;
QMetaEnum me = mo.enumerator(mo.indexOfEnumerator("SocketState"));
QString test(me.valueToKey(QAbstractSocket::UnconnectedState));

这看起来是一种非常有用的技术。不幸的是,并非所有枚举都是用MOC注册的。例如,QPrime::PrExSerSeror只是普通的C++枚举,所以不支持将它转换为名称:
const QMetaObject & mo = QAbstractSocket::staticMetaObject;
QMetaEnum me = mo.enumerator(mo.indexOfEnumerator("SocketState"));
QString test(me.valueToKey(QAbstractSocket::UnconnectedState));