如何在linux上打印Qt:HANDLE?(Qt5)
How can I print Qt:HANDLE on linux? (Qt5)
为了验证代码实际在哪个线程下运行,我使用了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);
相关文章:
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 控制台输出在 Qt5 中未正确显示
- 在Qt5中使用QTextSteam时的"使用已删除功能"
- Qt5 从 MySQL 数据库中选择数据
- Qt5 远程对象 + 自定义类型,但不在 POD 中
- Qt5 用户界面编译器:-i 选项不可用
- Qt5 throws std::bad_alloc
- 如何避免在 cmake 中自动链接 Qt5 库?
- 动态更改 qt5 选项卡名称
- 可能的Qt5错误:调用setFixedSize()禁用主窗口的关闭按钮(在Win7下)
- QT5 信号不会激活插槽内的功能
- protobuf C++ SQLite handle blob data
- 如何在使用 Qt5 构造函数时将非常量参数修改为常量参数?
- 如何在 Qt5 中执行多个 QProcess
- Qt5 [make -snap] 无法正确编译:进程"/usr/bin/snap"代码 1 退出
- 使用 Qt5 SQL 进行异步数据库访问的策略
- 如何在linux上打印Qt:HANDLE?(Qt5)