Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在linux上打印Qt:HANDLE?(Qt5)_C++_Linux_Multithreading_Qt5_Qdebug - Fatal编程技术网

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

C++ 如何在linux上打印Qt:HANDLE?(Qt5),c++,linux,multithreading,qt5,qdebug,C++,Linux,Multithreading,Qt5,Qdebug,作为验证我使用的代码实际运行在哪个线程下的一种方法。但是,此函数返回的类型符合文档a平台相关类型定义。在我的平台(Linux)上,它只是一个用于void*(无类型指针)的typedef 因此,我将如何使用例如qDebug()来打印它,以及如何将它转换为QString?我通过以下两个帮助函数自己解决了这个问题。请注意,我选择使用void*作为类型,而不是Qt::HANDLE,因为这在其他情况和其他平台中可能也很有用 //Allow Qt::HADNLE and void * to be strea

作为验证我使用的代码实际运行在哪个线程下的一种方法。但是,此函数返回的类型符合文档a平台相关类型定义。在我的平台(Linux)上,它只是一个用于
void*
(无类型指针)的typedef


因此,我将如何使用例如
qDebug()
来打印它,以及如何将它转换为
QString

我通过以下两个帮助函数自己解决了这个问题。请注意,我选择使用
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));
}
//允许Qt::HADNLE和void*流式传输到QDebug,以便于线程调试

QDebug操作符我更喜欢这种方式,也许您可以创建一个qstring变量,然后您甚至可以通过为某些小部件使用这个qstring变量来打印它

QString id=QString(“%1”).arg(stati_cast(QThread::currentThreadId()),16);
用户界面->用户->设置文本(id);
此->设置窗口标题(id);

您可以直接转储
QThread::currentThread
,顺便说一句,您好!我一直在明确寻找如何使用qDebug()打印句柄,但您的解决方案对于转换为QString绝对有用!欢迎使用堆栈溢出:)