如何在 gtkmm 4 中将我的 Gtk::Window 移动到屏幕上的特定位置

How to move my Gtk::Window to a specific position on screen in gtkmm 4

我子classed Gtk::Window,我想将它移动到屏幕上的某个位置,但我找不到任何方法来做到这一点。 Gtk::Window::move 在 Gtk4 中被移除了吗?如果是,我该如何移动我的 window?
我目前在 window class 的构造函数中有这个:

this->set_title(_("Screenshot"));
// this is for getting the size of the screen, and calculating the center position
Glib::RefPtr<Glib::ObjectBase> first_monitor = Gdk::Display::get_default()->get_monitors()->get_object(0);
Gdk::Rectangle rect;
first_monitor->get_rectangle(rect);
int posx = (rect.get_width() - this->get_width()) / 2;
this->move(posx, -1)
this->show();

编译时出现以下错误:

src/prefswindow.cpp: In constructor ‘PrefsWindow::PrefsWindow()’:
src/prefswindow.cpp:7:17: error: ‘using element_type = class Glib::ObjectBase {aka class Glib::ObjectBase}’ has no member named ‘get_rectangle’
  first_monitor->get_rectangle(rect);
                 ^~~~~~~~~~~~~
src/prefswindow.cpp:9:8: error: ‘class PrefsWindow’ has no member named ‘move’; did you mean ‘Role’?
  this->move(posx, -1)
        ^~~~
        Role

其中 class PrefsWindow 继承自 Gtk::Window。
提前致谢!

看起来 GTK 继续下放。请参阅 How to center GtkWindows in gtk4?,答案似乎是“不可能,gtk_window_set_position() API 已被删除”(由 GTK 核心开发人员确认)。该线程中的评论似乎暗示 GTK 正朝着删除与 window 管理相关的所有内容以及与屏幕相关的任何其他内容的方向发展,而不是应用程序的内部细节 windows.

因此,据我现在的理解,您有以下选择:

  • 使用一些特定于平台的方式来移动您的 window
  • 切换小部件工具包(例如 Qt,或旧版本的 GTK+)
  • 放弃搬家的想法window。