如何在linux上打印Qt:HANDLE?(Qt5)

How can I print Qt:HANDLE on linux? (Qt5)

本文关键字:HANDLE Qt5 Qt linux 打印      更新时间:2023-10-16

为了验证代码实际在哪个线程下运行,我使用了QThread::currentThreadId()。然而,根据文档,从该函数返回的Qt::HANDLE类型是一个依赖于平台的typedef。在我的平台(Linux)上,它只是void *(无类型指针)的typedef。

那么,我该如何使用例如qDebug()打印它,以及如何将它转换为QString

我自己用以下两个帮助函数解决了这个问题。请注意,我选择使用void *而不是Qt::HANDLE作为类型,因为这在其他情况和其他平台中可能也很有用。

// Allow Qt::HANDLE 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::HANDLE 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变量,然后你可以通过为一些小部件使用这个qsstring变量来打印它甚至setText()。

QString id=QString( "%1" ).arg(static_cast<int>(QThread::currentThreadId()), 16);
ui->user->setText(id);
this->setWindowTitle(id);