我该如何使用gtk_window_set_transient_for()函数?

3

我正在使用gtkmm库。我认为我的代码几乎完美,因为它可以编译并执行。但是当我在终端中点击在我的gtkmm软件中打开文件时,我会看到以下提示信息:

Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.

所以我在论坛上搜索了如何解决这个问题,我明白我需要使用这种方法:gtk_window_set_transient_for()。

实际上,我有一个Gtk::Window和一个Gtk::FileChooserDialog。你能给一个例子,演示如何使用gtk_window_set_transient_for()吗?

非常感谢!


3
"我的代码几乎完美" - 这是一个非常大胆的说法。 - user6943963
1个回答

3

Gtk::FileChooserDialog和其他GTK+对话框都是从Gtk::Window派生的。 Gtk::Window有一个方法set_transient_for(Gtk::Window& parent);,如果未设置,则会出现您所看到的消息。

要解决这个问题,需要使用set_transient_for(Gtk::Window &)。请注意,它需要一个引用而不是指针。因此,您可以像这样使用它。

{
  Gtk::Window first_window;

  ...

  Gtk::FileChooserDialog file_dialog("Title");

  ...

  file_dialog.set_transient_for(first_window);

  ...
}

您可以使用构造函数来为对话框设置短暂窗口,如下所示。

{
  Gtk::Window first_window;

  ...

  Gtk::FileChooserDialog file_dialog(first_window, "Title");

  ...
}

如果first_window是一个指针,那么您需要这样做。
file_dialog.set_transient_for(*first_window);

1
这太完美了!谢谢! - Paul Hain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接