C++ gtkmm 2.4开罗时钟示例在修改为在HBox内部绘制而不是在主窗口中绘制时不起作用

C++ gtkmm 2.4开罗时钟示例在修改为在HBox内部绘制而不是在主窗口中绘制时不起作用,c++,gtk,cairo,gtkmm,C++,Gtk,Cairo,Gtkmm,我正在Ubuntu 10.04上使用gtkmm2.4。(因此,我的示例包含on_expose_event()例程,而不是on_draw())。VBox中似乎不存在该窗口,它引用了on_expose_event()中的get_window()。我必须添加它吗 原始代码 我的代码是 测试h #ifndef TEST_H #define TEST_H #include <gtkmm.h> class TEST : public virtual Gtk::Window { priva

我正在Ubuntu 10.04上使用gtkmm2.4。(因此,我的示例包含on_expose_event()例程,而不是on_draw())。VBox中似乎不存在该窗口,它引用了on_expose_event()中的get_window()。我必须添加它吗

原始代码

我的代码是

测试h

#ifndef TEST_H
#define TEST_H

#include <gtkmm.h>


class TEST : public virtual Gtk::Window
{

private:

public:
  TEST();
  virtual ~TEST();

protected:

  Gtk::VBox V;          // Make V Box
  Gtk::HBox H1;     // Upper H Box
  Gtk::HBox H2;     // Lower H Box

class Clock : public virtual Gtk::DrawingArea
{
    public:
        Clock();
        virtual ~Clock();

    protected:
        //Override default signal handler:
        virtual bool on_expose_event(GdkEventExpose* event);
        double m_radius;
        double m_lineWidth;
        bool onSecondElapsed(void);


  Glib::RefPtr<Gdk::Window> m_refGdkWindow;
};

};



#endif // TEST_H

我怀疑这部分:

Clock c;  
H2.pack_start(c);
在此范围结束时,c被销毁。事实上,我不知道为什么它不会崩溃,但也许其他人可以解释一下。您希望在测试中声明时钟,使其具有适当的生存期:

class TEST {
   ... 
   class Clock ... {
     ...
   };
   Clock c;   // new code
   ...
};

该死的,我的错。是的,我意识到了这一点,当我看到你的答案时,我打算把它贴出来。无论如何谢谢你。
    g++ -g test.cc main.cc -o test `pkg-config gtkmm-2.4 cairomm-1.0`
Clock c;  
H2.pack_start(c);
class TEST {
   ... 
   class Clock ... {
     ...
   };
   Clock c;   // new code
   ...
};