gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:31:13 27 4
gpt4 key购买 nike

我正在尝试使用 gtkmm 创建简单的应用程序,但我遇到了一些问题。

现在是这样的:

enter image description here

这是生成它的代码:


我的窗口.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_ */

我的窗口.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:

#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_ */

我的绘图区.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...

}

正如评论所暗示的,当我尝试创建一个 Cairo::Context 时程序崩溃了,尽管我不认为 Cairo::Context 创建是问题:对 my_area.get_window() 返回的对象的每次取消引用都会使程序崩溃!

有人知道是什么导致了这个问题吗?

最佳答案

您好,您是否检查了 area.get_window() 的返回值,因为 documentation

Returns the widget’s window if it is realized, 0 otherwise.

关于c++ - 取消引用窗口对象时 Gtkmm 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35652632/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com