简体   繁体   English

取消引用窗口对象时Gtkmm应用程序崩溃

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM