C++ 动态显示或隐藏 FLTK 小部件?
Posted
技术标签:
【中文标题】C++ 动态显示或隐藏 FLTK 小部件?【英文标题】:C++ dynamically show or hide FLTK widgets? 【发布时间】:2011-04-01 14:47:14 【问题描述】:我是 C++ 新手,以前从未使用过宏,但我相信它们可以让我解决以下问题,尽管我欢迎其他解决方案。
我写了以下宏:
#define COMMAND(NUMBER) button_ ## NUMBER ## ->hide();
我想这样称呼它
for (int i = 1; i < 10; i++)
COMMAND(i)
希望当程序执行时它会执行以下操作:
button_1->hide();
button_2->hide();
button_3->hide();
button_4->hide();
.
.
button_10->hide();
我的想法是,我想根据加载表单时读取的配置文件动态地使 FLTK GUI 显示/隐藏小部件。
不幸的是,上面的宏似乎不起作用,而是它的作用是
button_i->hide();
由于 button_i 不存在而导致编译错误!
所以我的问题是: A) 是否可以在 C++ 中执行此操作? B) 宏能做到这一点吗? C) 如果不能,那还能做什么? D)如果宏可以做到这一点,那么我该如何修改上面的代码才能真正让它工作!
谢谢
【问题讨论】:
【参考方案1】:我很确定有一种方法可以使宏技巧发挥作用,但还有更好的选择。
例如,您可以将按钮存储在数组中。
假设您的按钮有一个名为 struct button
的类型,请像这样声明您的按钮:
struct button *buttons[42];
您需要像对单独的 button_X 变量一样初始化它们。
button[i] = <whatever you do to create button number i>;
那么你可以简单地做:
for (int i=0; i<42; i++)
button[i]->hide();
或仅使用其编号切换任何单个按钮。从长远来看,您可能会发现这比任何宏观技巧都要好。
(警告:数组是基于0
,所以你的第一个按钮是button[0]
)
【讨论】:
该死的,你比我快 19 秒 ;) 你是对的,存储在数组中是一个更好的解决方案。我找到了a good fltk specific solution here【参考方案2】:如果您可以控制button_2
等变量,我建议您改用数组。这样您就可以使用如下外观:
for (int i = 1; i < 10; i++)
button[i]->hide();
当然,这很容易放在宏中。
通常,您无法使用 C 中的普通循环来完成您想要的操作。但是,如果您真的想要走这条路,请查看 boost 预处理器包。
【讨论】:
【参考方案3】:不要尝试自己管理按钮,FLTK 不喜欢这样。您将拥有一系列您看不到的很棒的按钮。我不确定如何按照您想要的方式进行操作,但我会这样做:
Fl_Button * o = (Fl_Button *)myWindow->child(i);
o->hide();
并让按钮成为 FLTK 窗口的子级。
【讨论】:
以上是关于C++ 动态显示或隐藏 FLTK 小部件?的主要内容,如果未能解决你的问题,请参考以下文章