fltk1.3有时会添加自定义小部件

时间:2018-09-20 14:16:37

标签: c++ fltk

我的Fl_Window不会自动添加我自定义的Fl_Widget ...,但有时会添加。运作方式如下:

Fl_Window将自动添加此Fl_Widget:

//Menu version 1
class Menu : public Fl_Menu_Bar
{
public:
    Menu(int x, int y, int w, int h, const char* l=0)
        : Fl_Menu_Bar(x, y, w, h, l) {}
//...
};
//...

Fl_Window将不会自动添加此Fl_Widget:

//Menu version 2
class Menu : public Fl_Menu_Bar
{
public:
    Menu()
        : Fl_Menu_Bar(0,0,800,30) {}
//...
};
//...

这是我的运行方式:

版本1

//main
Fl_Window win(800,600);

//This will be added automatically
Menu m1(0,0,800,30);

win.show();
win.end();

return Fl::run();
//...

版本2

//main
Fl_Window win(800,600);

//This will not be added automatically.
Menu m2();

win.show();
win.end();

return Fl::run();
//...

要编译(我正在使用ubuntu),请使用

g++ main.cpp Menu.cpp -lfltk -lfltk_images

为什么我的菜单的版本1自动添加到 win 而不是版本2?特别是,无论其构造函数如何显示,如何将我的类对象添加到Fl_Window中?

documentation对此有所提及,但似乎只有使用FLUID时才有所区别(我不是)。

2 个答案:

答案 0 :(得分:0)

您的第二个菜单隐藏在第一个菜单中。

m1              -> x = 0, y = 0, w = 800, h = 30
m2 (by default) -> x = 0, y = 0, w = 800, h = 30

两者的值相同。

答案 1 :(得分:0)

我隐约记得这是一些特殊的C ++行为:如果使用默认构造函数,请不要在变量声明中指定括号(因为它具有某些特殊含义),换句话说,而不是:

Menu m2();

只需写:

Menu m2;