我最近问了这个问题:Horizontally-Drawn RowColumn Class for Motif Library (C)?
在我之前的问题中,我遇到了让xmRowColumnWidgetClass水平(逐行)而不是垂直(逐列)绘制的问题。在使用它之后,我想出了如何使用以下代码片段切换到水平绘图:
XmNorientation, XmHORIZONTAL,因此,创建xmRowColumnWidgetClass实例的代码现在如下所示:
rowColumn = XtVaCreateManagedWidget("rowcolumn",
xmRowColumnWidgetClass,
parentWidget,
XmNnumColumns, 3,
XmNorientation, XmHORIZONTAL,
XmNpacking, XmPACK_COLUMN,
XmNspacing, 6,
NULL);但是,我的新问题是,由于某种原因,XmNnumColumns字段现在引用的是行数,而不是实际的列数。在添加XmNorientation, XmHORIZONTAL部件之前,xmRowColumnWidgetClass实例从左到右绘制对象,但它停留在3列,就像它应该的那样。现在,它停留在3行,偶尔创建一个水平滚动条,这是我不想要的。我只想要垂直滚动。
因此,我需要从上到下水平绘制xmRowColumnWidgetClass实例的子项,但我需要每行最多放置3个子项,从而将其限制在一定的宽度内。
我尝试过使用XmNnumColumns字段,但适用于较多孩子的东西不适用于较少的孩子,反之亦然。有时它将其设置为4或5列而不是3列,有时将其设置为2列,而第3列完全为空。我遇到了许多类似的问题,甚至在尝试使用XmNpacking, XmPACK_TIGHT而不是XmNpacking, XmPACK_COLUMN之类的东西时也是如此。
如果有人能够找到xmRowColumnWidgetClass的官方文档并链接它,那将是非常感谢的。
对于任何熟悉这个库的人:
如何创建一个xmRowColumnWidgetClass实例来水平(逐行)绘制,同时保持一定数量的列?
它应该能够处理任意数量的子项,并根据需要添加任意多的行,以使其恰好保持为3列。
这个库的另一组示例:
https://github.com/spartrekus/Motif-C-Examples
https://github.com/spartrekus/Motif-C-Examples/blob/master/rowcol.c
发布于 2020-04-22 01:19:14
XmRowColumn被设计为实现顶级菜单栏和所有其他菜单类……您正在搜索类似widget的网格,因此您必须使用XmForm read the related question for that.
发布于 2020-09-12 06:44:51
简而言之:尝试WtTable widget
更长的解释如下:
当您选择水平配置时,XmRowColumn关于“列”变为“行”的行为是非常不幸的。出于此目的,使用XmForm而不是XmRowColumn的替代方案是可行的,但是它需要手动设置子约束,即使这样,也很可能无法实现在XmRowColumn中实现的自动调整大小。
通过今天的搜索,我找到了WtTable widget,它可以很好地满足我的需求。它和XmRowColumn一样“几乎”是自动的,不需要手动设置任何约束。我在我的Motif代码中尝试了一下,并且运行良好。
但是请注意,我说的“几乎”是自动的。“几乎”是因为您需要指定列数和行数,并且需要为每个子小部件指定列和行。但是,所有这些都可以自动化:您可以创建一个方便的函数,在内部管理列和行的计数器,这样您就可以将一个小部件传递给这样的函数,它会自动将它放入它所属的单元格中:您甚至可以让该函数在需要时在WtTable中创建一个新行。
https://stackoverflow.com/questions/61329506
复制相似问题