GTK+ 'GTK_IS_CONTAINER'失败
GTK+ 'GTK_IS_CONTAINER' failed
我正在学习GTK ,并且作为练习,我正在尝试制作一个简单的GUI文本编辑器。这是我的代码的简化和较短的版本,它说明了我遇到的问题:
#include <gtk/gtk.h>
class App
{
protected:
GtkWidget *window;
GtkTextBuffer *buffer;
GtkWidget *view;
};
class Window: public App
{
public:
Window()
{
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
g_signal_connect(window, "delete-event", G_CALLBACK(gtk_main_quit), 0);
}
void show()
{
gtk_widget_show_all(window);
}
};
class Editor: public App
{
public:
Editor()
{
view = gtk_text_view_new();
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
gtk_text_buffer_set_text(buffer, "TEXT", -1);
add();
}
private:
void add()
{
gtk_container_add(GTK_CONTAINER(window), view);
}
};
int main(int argc, char *argv[])
{
gtk_init(&argc, &argv);
Window *w = new Window();
Editor *e = new Editor();
w->show();
delete w;
delete e;
gtk_main();
}
该程序编译并运行,但应在屏幕上显示带有文本"文本"的屏幕可编辑的小部件,但事实并非如此。在终端中运行此程序显示此消息:(test.o:23861): Gtk-CRITICAL **: gtk_container_add: assertion 'GTK_IS_CONTAINER (container)' failed
。我的问题是是什么原因导致了这一点,以及如何解决它。
从class App
继承的class Window
和class Editor
中实例变量的副本是 unique 。您不能共享这样的数据;Window::window
和Editor::window
是不同的变量,Editor::window
永远不会初始化。
这是遗传在C 中工作的基本部分。如果您不熟悉这一点,则应阅读有关该主题的C 书籍或教程。
如果您熟悉这一点并且只是忘记了,那么如果您走下去的路线,您应该做的是class App
都具有所有程序逻辑,并且main()
专门与class App
实例一起工作。您还应该考虑GTKMM,它是GTK 顶部的C 包装器,它使您可以与GTK 一起工作,就好像是C 一样。
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- 如何让LLDB在成功时退出,在失败时等待
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 生成MRPT库时cmake配置失败
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- variadic模板中的模板参数推导失败