linux - 在 Motif 中构建长滚动按钮小部件列表的正确方法是什么?

标签 linux solaris x11 motif

我正在处理一个旧的 Motif 应用程序,它需要加载和显示一长串条目(大约 1500 个)。它通过 XtVaCreateManagedWidget() 创建和管理 xmFormWidgetClass 实例,然后用一堆线性层次结构填充它 xmFrameWidgetClass->xmFormWidgetClass->xmFormWidgetClass->xmPushButtonWidgetClass 。每个 PushButton 都包含一个多行标签。当这个东西被填充时,它会占用大量的 CPU,它会在 X/Motif 库中进行一些几何计算。添加新按钮的速度非常快。看起来 XtVaCreateManagedWidget() 内部使用了 O(N) 算法。

如果我在 xmFormWidgetClass 的原始实例上执行 XtUnrealizeWidget(),事情就会好得多。条目正在以几乎恒定的速度添加,但后来我找不到一种方法来显示我构建的整个东西。 xmFormWidgetClass 的原始实例的 XtRealizeWidget() 不会在窗口中呈现它。

我做错了什么?有没有办法填充层次结构,然后计算几何图形并立即将其渲染到屏幕上?

重新设计应用程序是一种选择,但它是一种不得已的选择。

任何让我留在 Motif 库中的建议都将不胜感激!

问候, /谢尔盖

最佳答案

尝试在 XtRealizeWidget 之后调用 XtManageChild

关于linux - 在 Motif 中构建长滚动按钮小部件列表的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713864/

相关文章:

macos - 是否有固定 6x13 位图字体的空白较少(行距 0.8)的版本?

c - 在c(linux)中绘制一个点的系统调用

linux - lm75 内核模块在用户空间可用

python - 从 python 中的管道读取是不可能的

sed - 如何使用sed在Solaris上删除下一行

在 X11 事件循环中可以捕获操纵杆/游戏 handle 事件吗?

c++ - 尝试在 Linux 上运行 OpenGL,拥有必要的库但无法运行? (C++)

java - 如何知道 Unix 中正在运行什么类?

linux - 代码注入(inject) - Solaris 和 Linux

c - 如何以编程方式检索附加到 Xorg 屏幕的图形适配器和显示器名称?