如何绘制多个矩形FLTK C ++

时间:2019-07-15 10:35:25

标签: c++ fltk

我试图在fltk中创建一个程序,并且我遵循了此示例

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>

int main(int argc, char **argv) {
  Fl_Window *window = new Fl_Window(340,180);
  Fl_Box *box = new Fl_Box(20,40,300,100,"Hello, World!");
  box->box(FL_UP_BOX);
  box->labelfont(FL_BOLD+FL_ITALIC);
  box->labelsize(36);
  box->labeltype(FL_SHADOW_LABEL);
  window->end();
  window->show(argc, argv);
  return Fl::run();
}

来自FLTK docs。问题是我试图在窗口上绘制多个矩形形状,创建多个装箱以具有多个矩形似乎非常繁琐。我尝试查找许多关于在FLTK上绘制形状的教程,但找不到足够简单的东西来展示给我看。

到目前为止,我的代码看起来像这样

#include <FL/Fl.H>
#include <FL/Fl_Widget.H>
#include <FL/Fl_Window.H>
// #include <FL/fl_draw.H>
#include <iostream>

int main() {
    Fl_Window *window = new Fl_Window(900, 600);
    window->position(0, 0);
    window->color(FL_BLACK);
    window->end();
    window->show();
    while (1) {
        int ev = Fl::event();
        if (ev == FL_SHORTCUT) {
            if (Fl::event_key() == FL_Escape)
                break;
        }
        Fl::check();
    }
    return 0;
}

,我想在循环内(连续)实现图形。

1 个答案:

答案 0 :(得分:1)

作为一个重要的注意事项:您应该真正考虑使用File file = new File(csvFile); CsvReader csvReader = new CsvReader(); try (CsvParser csvParser = csvReader.parse(file, StandardCharsets.UTF_8)) { CsvRow row; while ((row = csvParser.nextRow()) != null) { if (!orderProductMap.containsKey(row.getField(0))) { orderProductMap.put(row.getField(0), new HashSet<>()); } ((Set) orderProductMap.get(row.getField(0))).add(row.getField(1)); } } 而不是自定义的while循环,我遇到了许多类似方法的问题,例如您的方法。

现在,回答您的问题:

以该示例为例,将Box创建内容包装在一个循环中。例如,您可以使用一个索引来为每个Box分配不同的位置。

Fl::run()

您可以在“构造器”框中使用公式#include <FL/Fl.H> #include <FL/Fl_Window.H> #include <FL/Fl_Box.H> int main(int argc, char **argv) { Fl_Window *window = new Fl_Window(340,500); // 3 Fl_Boxes in a loop for (int i = 0; i < 3; ++i) { Fl_Box *box = new Fl_Box(20, 40 + i*120, 300, 100,"Hello, World!"); box->box(FL_UP_BOX); box->labelfont(FL_BOLD+FL_ITALIC); box->labelsize(36); box->labeltype(FL_SHADOW_LABEL); } window->end(); window->show(argc, argv); return Fl::run(); } 控制布局。您必须根据自己的需求进行调整。

使用FLTK时,一个基本规则是:在窗口构造函数和20, 40 + i*120, 300, 100之间初始化的所有窗口小部件,或工作方式相同的任何其他窗口小部件,例如window->end(),都将成为周围元素的子元素,并且将显示(如果显示了他们的父母)。

如果您要寻找Fl_Group,我不确定。我发现Erco's FLTK Cheat Page非常有用。您可能会在那里找到解决问题的灵感和其他方法。