【问题标题】:How can I print Qt:HANDLE on linux? (Qt5)如何在 Linux 上打印 Qt:HANDLE? (Qt5)
【发布时间】:2014-12-28 20:43:57
【问题描述】:

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

那么我将如何使用 qDebug() 进行打印,以及如何将其转换为 QString

【问题讨论】:

  • 你可以转储QThread::currentThread,顺便说一句。

标签: c++ linux multithreading qt5 qdebug


【解决方案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));
}

【讨论】:

    【解决方案2】:

    我更喜欢这种方式,也许你可以创建一个 qstring 变量,然后你可以通过对某些小部件使用这个 qstring 变量甚至 setText() 来打印它。

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

    【讨论】:

    • 嗨!我一直在寻找如何使用 qDebug() 打印句柄,但是您的解决方案对于转换为 QString 绝对有用!欢迎来到堆栈溢出 :)
    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多