1

我最近问了这个问题:Horizo​​ntally-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

4

2 回答 2

0

XmRowColumn旨在实现顶部菜单栏和所有其他菜单类...您正在搜索类似小部件的网格,因此您必须为此XmForm阅读相关问题。

于 2020-04-21T17:19:13.940 回答
0

简而言之:试试WtTable 小部件

更长的解释如下:

XmRowColumn当您选择水平配置时,将“列”变成“行”的行为是非常不幸的。使用XmForm而不是XmRowColumn用于此目的的替代方案是可行的,但是它需要手动设置子约束,即使那样,您也很可能无法实现在XmRowColumn.

通过今天的搜索,我找到了WtTable 小部件,它可以很好地满足我的目的。它“几乎”是自动的,XmRowColumn并且不需要手动设置任何约束。我在我的 Motif 代码中尝试了它,并且工作正常。

但是请注意,我说“几乎”是自动的。“几乎”是因为需要指定列数和行数,并且需要为每个子小部件指定列数和行数。但是,所有这些都可以自动化:您可以创建一个方便的函数,在内部管理列和行的计数器,这样您就可以将一个小部件传递给该函数并自动将其放入它所属的单元格中:您甚至可以创建该函数在需要时创建一个新行WtTable

于 2020-09-11T22:44:50.540 回答