Как я могу напечатать Qt:HANDLE на Linux? (Qt5)

В качестве средства проверки того, в каком потоке фактически выполняется мой код, я использую QThread:: currentThreadId (). Однако тип Qt::HANDLE, который возвращается из этой функции, согласно документации является зависимым от платформы typedef. На моей платформе (Linux) это был просто typedef для void * (указатель без указания типа).

Итак, как бы я распечатать это, используя, например, qDebug()и как насчет преобразования его в QString?

1 ответ

Решение

Я сам исправил это с помощью следующих двух вспомогательных функций. Обратите внимание, что я выбрал использование void * как тип вместо Qt::HANDLE поскольку это может быть полезно в других случаях и на других платформах.

//Allow Qt::HADNLE and void * to be streamed to QDebug for easier threads debugging
QDebug operator <<(QDebug d, void *p){
    d.nospace() << QString::number((long long)p, 16);
    return d.space();
}

//Allow Qt::HADNLE and void * to be added together with QString objects for easier threads debugging
const QString operator+ ( const QString &s, void *p ){
    return (s+ QString::number((long long)p, 16));
}

Я предпочитаю этот способ, возможно, вы создадите переменную qstring, а затем сможете распечатать ее даже с помощью setText(), используя эту переменную qstring для некоторых виджетов.

QString id=QString( "%1" ).arg(stati_cast<int>(QThread::currentThreadId()), 16);
ui->user->setText(id);
this->setWindowTitle(id);
Другие вопросы по тегам