Qt winId() 强制 32 位值

Posted

技术标签:

【中文标题】Qt winId() 强制 32 位值【英文标题】:Qt winId() forcing 32bit values 【发布时间】:2010-01-13 02:16:49 【问题描述】:

我正在尝试使用小部件的 winId 将来自外星应用程序 (python OCC) 的显示嵌入到 (Py)Qt 中。但是当我将它传递给 OCC 时,我得到一个溢出错误。 检查 winId qt 会返回其 4318283408,它大于 32 位数字。我运行 64 位(osx)并且两个库都是为 64 位编译的,但我有一种预感,OCC 仍然只喜欢 32 位数字。所以我的问题是,有没有办法控制Qt返回的winId的范围?

谢谢

亨里克

【问题讨论】:

【参考方案1】:

查看 Qt 的源代码,在文件 src/gui/kernel/qwindowdefs.h 中,您会发现 WId 对于 64 位 OSX 的类型定义为 long(对于 32 位 OSX,它是 int)。 64 位 OSX 上的 long 长度为 8 个字节(或 64 位),因此 4318283408 是一个有效值。

如果要强制 winId() 返回 32 位值,则需要链接到 32 位版本的 Qt 库。

【讨论】:

嗯.. 我使用的两个库都是 64 位的,但我怀疑 OCC 的 64 位端口并不完全支持 64 位。希望 Qt 中可能有一些模糊的设置可以以某种方式修改 winId 吗?至少作为临时黑客

以上是关于Qt winId() 强制 32 位值的主要内容,如果未能解决你的问题,请参考以下文章

强制 Qt5 从 exe 目录加载 SSL dll

Qt:强制 QGraphicsItem 更新

Qt中的强制类型转换

如何在Qt中强制设置项目选择

Elasticseach-强制字段仅索引,避免存储

Qt Release 构建时强制包含调试信息