C++ gtkmm 2.4开罗时钟示例在修改为在HBox内部绘制而不是在主窗口中绘制时不起作用
我正在Ubuntu 10.04上使用gtkmm2.4。(因此,我的示例包含on_expose_event()例程,而不是on_draw())。VBox中似乎不存在该窗口,它引用了on_expose_event()中的get_window()。我必须添加它吗 原始代码 我的代码是 测试hC++ 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
#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
...
};