[英]Gtkmm application crashes when dereferencing window object
I am trying to create simple application with gtkmm
but I'm having some problem. 我正在尝试使用gtkmm
创建简单的应用程序,但出现了一些问题。
Here's how it looks now: 现在是这样的:
Here's the code to generate it: 这是生成它的代码:
MyWindow.h: MyWindow.h:
#ifndef MYWINDOW_H_
#define MYWINDOW_H_
#include <gtkmm/window.h>
#include <gtkmm/frame.h>
#include "MyDrawingArea.h"
class MyWindow :public Gtk::Window {
public:
MyWindow();
virtual ~MyWindow() {}
private:
MyDrawingArea drawing_area;
};
#endif /* MYWINDOW_H_ */
MyWindow.cpp: MyWindow.cpp:
#include "MyWindow.h"
MyWindow::MyWindow() : drawing_area("Drawing area") {
set_title("My app");
set_border_width(10);
add(drawing_area);
drawing_area.draw_stuff_in_area();
show_all_children();
}
MyDrawingArea.h: MyDrawingArea.h:
#ifndef MYDRAWINGAREA_H_
#define MYDRAWINGAREA_H_
#include <gtkmm/frame.h>
#include <gtkmm/drawingarea.h>
class MyDrawingArea : public Gtk::Frame {
public:
MyDrawingArea(const Glib::ustring& title);
virtual ~MyDrawingArea() {}
void draw_stuff_in_area();
private:
Gtk::DrawingArea area;
};
#endif /* MYDRAWINGAREA_H_ */
MyDrawingArea.cpp: MyDrawingArea.cpp:
#include "MyDrawingArea.h"
#include <iostream>
#include <gtkmm/window.h>
MyDrawingArea::MyDrawingArea(const Glib::ustring& title) : Gtk::Frame(title) {
set_border_width(20);
add(area);
area.set_size_request(300, 250);
}
void MyDrawingArea::draw_stuff_in_area() {
Cairo::RefPtr<Cairo::Context> cr = area.get_window()->create_cairo_context(); // program crashes here!
// draw stuff with 'cr' here...
}
As the comment suggests, the program crashes when I try to create a Cairo::Context
, though I don't think the Cairo::Context
creation is the problem: Every dereferencing to the object returned by my_area.get_window() crashes the program! 就像注释所暗示的那样,尽管我不认为创建Cairo::Context
是问题,但当我尝试创建Cairo::Context
时,程序崩溃了: 每次引用my_area.get_window()返回的对象都会使程序崩溃!
Anyone know what's causing the problem? 有人知道是什么原因引起的吗?
Hi did you check the return value of area.get_window()
because documentation says 您好,您检查过area.get_window()
的返回值是因为文档说
Returns the widget's window if it is realized, 0 otherwise. 返回小部件的窗口(如果已实现),否则返回0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.