【发布时间】:2020-04-17 21:53:01
【问题描述】:
我正在使用 Motif 库来完成我的工作。如果有人不熟悉这个库,你可以在https://packages.ubuntu.com/xenial/amd64/libmotif-dev/filelist 找到文件列表,以及在Motif 1.2 X11 on using RowColumn widget inside a ScrolledWindow 找到另一个问题。
我的问题是 xmRowColumnWidgetClass 是垂直绘制的,这意味着它逐列绘制(从左上角开始移动到左下角,然后向右移动到下一列,等等)
做这样的事情:
Widget parentWidget, rowColumn;
XtAppContext app;
parentWidget = XtVaAppInitialize(&app, "rowColumn", NULL, 0,
&argc, argv, NULL, NULL);
然后像这样:
rowColumn = XtVaCreateManagedWidget("rowcolumn",
xmRowColumnWidgetClass,
parentWidget,
XmNnumColumns, 3,
XmNpacking, XmPACK_COLUMN,
XmNspacing, 6,
NULL);
(void) XtVaCreateManagedWidget("button 1",
xmPushButtonWidgetClass, rowColumn, NULL);
(void) XtVaCreateManagedWidget("button 2",
xmPushButtonWidgetClass, rowColumn, NULL);
(void) XtVaCreateManagedWidget("button 3",
xmPushButtonWidgetClass, rowColumn, NULL);
(void) XtVaCreateManagedWidget("button 4",
xmPushButtonWidgetClass, rowColumn, NULL);
(void) XtVaCreateManagedWidget("button 5",
xmPushButtonWidgetClass, rowColumn, NULL);
(void) XtVaCreateManagedWidget("button 6",
xmPushButtonWidgetClass, rowColumn, NULL);
(void) XtVaCreateManagedWidget("button 7",
xmPushButtonWidgetClass, rowColumn, NULL);
(void) XtVaCreateManagedWidget("button 8",
xmPushButtonWidgetClass, rowColumn, NULL);
(void) XtVaCreateManagedWidget("button 9",
xmPushButtonWidgetClass, rowColumn, NULL);
所以上面的代码会像这样创建小部件:
button 1 button 4 button 7
button 2 button 5 button 8
button 3 button 6 button 9
我的问题是我希望某些并排而不是上下。
假设作为一种解决方法,我指定了这样的顺序:按钮 1、按钮 4、按钮 7、按钮 2、按钮 5、按钮 8、按钮 3、按钮 6、按钮 9。看起来像这样:
button 1 button 2 button 3
button 4 button 5 button 6
button 7 button 8 button 9
但是,如果我想删除一个按钮或添加一个新按钮,这会搞砸一切。假设我从上面的示例中删除了“按钮 4”,因此顺序如下:按钮 1、按钮 7、按钮 2、按钮 5、按钮 8、按钮 3、按钮 6、按钮 9。看起来像这样:
button 1 button 5 button 6
button 7 button 8 button 9
button 2 button 3
如您所见,现在几乎所有应该并排并排的东西现在都没有了。
添加新按钮时也会出现此问题:假设我们要在末尾添加按钮 10:按钮 1、按钮 4、按钮 7、按钮 2、按钮 5、按钮 8、按钮 3、按钮 6 ,按钮 9,按钮 10。如下所示:
button 1 button 5 button 9
button 4 button 8 button 10
button 7 button 3
button 2 button 6
到目前为止,这看起来最糟糕,因为添加一个新按钮会将行的法线增加到 4 而不是 3,这会改变整个布局。
致任何熟悉这个库的人:
如何创建水平(逐行)而不是垂直绘制的 xmRowColumnWidgetClass 实例? (逐列)
或者,我如何扩展这个库并可能创建一个 xmHorRowColumnWidgetClass 来满足我的需求?
该库的另一组示例:
https://github.com/spartrekus/Motif-C-Examples
https://github.com/spartrekus/Motif-C-Examples/blob/master/rowcol.c
【问题讨论】:
-
您找到解决方案了吗?我和你的情况一样:我需要一个水平排列的 RowColumn 并限制列数。奇怪的是,RowColumn 小部件无法做到这一点(并且 XmForm 不可比:您需要手动提供约束,而 RowColumn 会自动调整自身大小以适应子级所需的严格大小,而无需任何手动约束)。
-
我找到了 RowColumn 的替代小部件,这对我的目的来说很好。我会将其发布为您其他问题的答案。