我如何使用gtk_window_set_transient_for()?

时间:2017-01-22 14:32:39

标签: c++ gtkmm gtkmm3

我正在使用图书馆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()的例子吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

Gtk::FileChooserDialog和其他GTK +对话派生于Gtk::WindowGtk::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);