为了验证代码实际在哪个线程下运行,我使用了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);