c - gtk_window_new 中的段错误
问题描述
我有一个用 C 编写的简单 GTK 应用程序,它在线上出现段错误window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
这是代码:
#include <gtk/gtk.h>
int main(int argc, char **argv) {
GtkApplication *app = NULL;
GtkWidget *window = NULL;
app = gtk_application_new("com.github.Toothless204", G_APPLICATION_FLAGS_NONE);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_application_add_window(app, GTK_WINDOW(window));
int status = g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
return status;
}
我已经四处搜索以找到答案,但没有找到任何实际提供有关问题可能是什么的答案
解决方案
问题:试图在 GtkApplication 调用 GTK+ 初始化函数之前创建一个窗口。
在使用 GTK+ 之前,您需要对其进行初始化。 https://developer.gnome.org/gtk3/stable/gtk3-General.html
#include <gtk/gtk.h>
int main(int argc, char **argv) {
GtkWidget *window = NULL;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show (window);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_main_quit), NULL);
gtk_main();
return 0;
}
出于同样的原因,必须在发出 GApplication 'startup' 信号之后添加 GtkApplication 窗口。 https://wiki.gnome.org/HowDoI/GtkApplication
#include <gtk/gtk.h>
static void activate (GApplication *app, gpointer user_data) {
GtkWidget *window;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_application_add_window(GTK_APPLICATION(app), GTK_WINDOW(window));
gtk_widget_show (window);
}
int main (int argc, char **argv) {
GtkApplication *app;
int status;
app = gtk_application_new ("com.github.Toothless204", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
推荐阅读
- css - CSS:在某些选择器之前选择伪元素之后
- java - 在 JMeter 中发送肥皂消息中的动态值
- css - Vue + 顺风手风琴与过渡
- bootstrap-4 - 强制 justify-content-around 的最后一个元素与上一行的第一个元素对齐
- php - shopify如何删除应用程序卸载页面?
- java - TestNG beforeGroups 没有被执行
- python - 用于动态变量更改的 Jinja2 案例切换
- c - 需要帮助使用 qsort 从结构中对数组进行排序
- javascript - 通过选择 Div 属性更改 Div 的宽度
- sql - Oracle max(date) 显示不同的结果