作为验证我的代码实际在哪个线程下运行的一种方法,我使用QThread::currentThreadId()。但是,根据文档,从该函数返回的Qt::HANDLE类型是平台相关的 typedef。在我的平台(Linux)上,它只是void *
(无类型指针)的 typedef。
那么我将如何使用 example 进行打印qDebug()
,以及将其转换为QString
?
作为验证我的代码实际在哪个线程下运行的一种方法,我使用QThread::currentThreadId()。但是,根据文档,从该函数返回的Qt::HANDLE类型是平台相关的 typedef。在我的平台(Linux)上,它只是void *
(无类型指针)的 typedef。
那么我将如何使用 example 进行打印qDebug()
,以及将其转换为QString
?
我用以下两个帮助功能自己解决了这个问题。请注意,我选择使用void *
as 类型而不是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 变量,然后你可以通过对某些小部件使用这个 qstring 变量甚至 setText() 来打印它。
QString id=QString( "%1" ).arg(stati_cast<int>(QThread::currentThreadId()), 16);
ui->user->setText(id);
this->setWindowTitle(id);