“gtk_message_dialog_set_image”已弃用
‘gtk_message_dialog_set_image’ is deprecated
我有这个代码来显示消息对话框:
void mensajeVentana (GtkWidget *wid, GtkWidget *win, gchar *mensaje) {
GtkWidget *dialog = NULL;
GtkWidget *image;
dialog = gtk_message_dialog_new(GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, mensaje);
image = gtk_image_new_from_icon_name ("computer-fail", GTK_ICON_SIZE_DIALOG);
gtk_widget_show (image);
gtk_message_dialog_set_image(GTK_MESSAGE_DIALOG(dialog), image);
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
对话框图像已弃用!
编译时,出现以下消息警告:
‘gtk_message_dialog_set_image’ is deprecated [-Wdeprecated-declarations]
我正在使用以下版本的 gcc 和 GTK:
- gcc 版本 8.3.0 (Debian 8.3.0-6)
- GTK3, libgtk-3-0:amd64 3.24.5-1
我研究了 'gtk_message_dialog_set_image' 的替代品,我找到的唯一帮助是文档说:
gtk_message_dialog_get_image has been deprecated since version 3.12 and should not be used in newly-written code.
Use GtkDialog for dialogs with images
Gets the dialog’s image.
但除此之外,我没有找到任何关于如何使用 GTK3 显示带有消息对话框的图标而不使用函数的示例:'gtk_message_dialog_set_image'.
有什么想法吗?
谢谢!
更新.-
感谢 Alexander Dmitriev 的建议,我编写了以下代码:
void mensajeVentana (GtkWidget *wid, GtkWidget *win, gchar *mensaje) {
GtkWidget *dialog = NULL;
GtkWidget *image, *content_area, *box, *label;
dialog = gtk_dialog_new_with_buttons ("Alerta",
GTK_WINDOW(win),
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
"Cerrar",
GTK_BUTTONS_CLOSE,
NULL);
content_area = gtk_dialog_get_content_area (dialog);
box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
label = gtk_label_new (mensaje);
image = gtk_image_new();
gtk_image_set_from_icon_name (image, "computer-fail", GTK_ICON_SIZE_DIALOG);
gtk_widget_show (image);
gtk_box_pack_start (box, image, TRUE, TRUE, 1);
gtk_container_add (content_area, box);
gtk_container_add (content_area, label);
gtk_widget_show_all (dialog);
}
然而,有两个问题:
- 所附图片在顶部而不是中间左侧。
- 关闭按钮不会关闭对话框,它什么都不做。
我该如何解决这两个问题?
Use GtkDialog for dialogs with images
GTK 开发者希望消息对话框是纯文本的。如果你想要带有图标的消息对话框,他们会强制你手动完成:
GtkWidget *dialog, *content_area, *box, *image;
dialog = gtk_dialog_new_with_buttons () // create dialog
content_area = gtk_dialog_get_content_area (dialog) // get a container to place your own widgets
// make a GtkGrid or GtkBox, pack it there and manually with GtkImage and GtkLabel
box = gtk_box_new (...)
image = gtk_image_new (...)
gtk_box_pack... (box, image)
gtk_container_add (content_area, box) // see note below
gtk_dialog_get_content_area()
returns一个GtkBox
,这样就可以使用gtk_box_pack...
方法了
或者,gtk_message_dialog_get_message_area ()
并在那里打包一个图标,但它是一个垂直的 GtkBox。
我终于得到了我期待的结果:
void mensajeVentana (GtkWidget *wid, GtkWidget *win, gchar *mensaje) {
GtkWidget *dialog = NULL;
GtkWidget *image, *content_area, *box, *label;
dialog = gtk_dialog_new_with_buttons ("Alerta",
GTK_WINDOW(win),
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
"Cerrar",
GTK_BUTTONS_CLOSE,
NULL);
content_area = gtk_dialog_get_content_area (GTK_DIALOG(dialog));
box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
label = gtk_label_new (mensaje);
image = gtk_image_new();
gtk_image_set_from_icon_name (GTK_IMAGE(image), "computer-fail", GTK_ICON_SIZE_DIALOG);
gtk_widget_show (image);
gtk_widget_set_halign (image, GTK_ALIGN_START);
g_signal_connect_swapped (dialog,
"response",
G_CALLBACK (gtk_widget_destroy),
dialog);
gtk_box_pack_start (GTK_BOX(box), image, TRUE, TRUE, 10);
gtk_box_pack_start (GTK_BOX(box), label, TRUE, TRUE, 10);
gtk_container_add (GTK_CONTAINER(content_area), box);
gtk_widget_show_all (dialog);
}
我有这个代码来显示消息对话框:
void mensajeVentana (GtkWidget *wid, GtkWidget *win, gchar *mensaje) {
GtkWidget *dialog = NULL;
GtkWidget *image;
dialog = gtk_message_dialog_new(GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, mensaje);
image = gtk_image_new_from_icon_name ("computer-fail", GTK_ICON_SIZE_DIALOG);
gtk_widget_show (image);
gtk_message_dialog_set_image(GTK_MESSAGE_DIALOG(dialog), image);
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
对话框图像已弃用!
编译时,出现以下消息警告:
‘gtk_message_dialog_set_image’ is deprecated [-Wdeprecated-declarations]
我正在使用以下版本的 gcc 和 GTK:
- gcc 版本 8.3.0 (Debian 8.3.0-6)
- GTK3, libgtk-3-0:amd64 3.24.5-1
我研究了 'gtk_message_dialog_set_image' 的替代品,我找到的唯一帮助是文档说:
gtk_message_dialog_get_image has been deprecated since version 3.12 and should not be used in newly-written code.
Use GtkDialog for dialogs with images
Gets the dialog’s image.
但除此之外,我没有找到任何关于如何使用 GTK3 显示带有消息对话框的图标而不使用函数的示例:'gtk_message_dialog_set_image'.
有什么想法吗? 谢谢!
更新.- 感谢 Alexander Dmitriev 的建议,我编写了以下代码:
void mensajeVentana (GtkWidget *wid, GtkWidget *win, gchar *mensaje) {
GtkWidget *dialog = NULL;
GtkWidget *image, *content_area, *box, *label;
dialog = gtk_dialog_new_with_buttons ("Alerta",
GTK_WINDOW(win),
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
"Cerrar",
GTK_BUTTONS_CLOSE,
NULL);
content_area = gtk_dialog_get_content_area (dialog);
box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
label = gtk_label_new (mensaje);
image = gtk_image_new();
gtk_image_set_from_icon_name (image, "computer-fail", GTK_ICON_SIZE_DIALOG);
gtk_widget_show (image);
gtk_box_pack_start (box, image, TRUE, TRUE, 1);
gtk_container_add (content_area, box);
gtk_container_add (content_area, label);
gtk_widget_show_all (dialog);
}
然而,有两个问题:
- 所附图片在顶部而不是中间左侧。
- 关闭按钮不会关闭对话框,它什么都不做。
我该如何解决这两个问题?
Use GtkDialog for dialogs with images
GTK 开发者希望消息对话框是纯文本的。如果你想要带有图标的消息对话框,他们会强制你手动完成:
GtkWidget *dialog, *content_area, *box, *image;
dialog = gtk_dialog_new_with_buttons () // create dialog
content_area = gtk_dialog_get_content_area (dialog) // get a container to place your own widgets
// make a GtkGrid or GtkBox, pack it there and manually with GtkImage and GtkLabel
box = gtk_box_new (...)
image = gtk_image_new (...)
gtk_box_pack... (box, image)
gtk_container_add (content_area, box) // see note below
gtk_dialog_get_content_area()
returns一个GtkBox
,这样就可以使用gtk_box_pack...
方法了
或者,gtk_message_dialog_get_message_area ()
并在那里打包一个图标,但它是一个垂直的 GtkBox。
我终于得到了我期待的结果:
void mensajeVentana (GtkWidget *wid, GtkWidget *win, gchar *mensaje) {
GtkWidget *dialog = NULL;
GtkWidget *image, *content_area, *box, *label;
dialog = gtk_dialog_new_with_buttons ("Alerta",
GTK_WINDOW(win),
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
"Cerrar",
GTK_BUTTONS_CLOSE,
NULL);
content_area = gtk_dialog_get_content_area (GTK_DIALOG(dialog));
box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
label = gtk_label_new (mensaje);
image = gtk_image_new();
gtk_image_set_from_icon_name (GTK_IMAGE(image), "computer-fail", GTK_ICON_SIZE_DIALOG);
gtk_widget_show (image);
gtk_widget_set_halign (image, GTK_ALIGN_START);
g_signal_connect_swapped (dialog,
"response",
G_CALLBACK (gtk_widget_destroy),
dialog);
gtk_box_pack_start (GTK_BOX(box), image, TRUE, TRUE, 10);
gtk_box_pack_start (GTK_BOX(box), label, TRUE, TRUE, 10);
gtk_container_add (GTK_CONTAINER(content_area), box);
gtk_widget_show_all (dialog);
}