Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 如何在Vala中设置小部件来拖动未装饰的窗口?_User Interface_Gtk_Vala - Fatal编程技术网

User interface 如何在Vala中设置小部件来拖动未装饰的窗口?

User interface 如何在Vala中设置小部件来拖动未装饰的窗口?,user-interface,gtk,vala,User Interface,Gtk,Vala,这似乎是一个简单的问题。我是Gtk和Vala编程的初学者。我也是一个初学者程序员。我从ValaGTKGUI开始,现在我有了一个不可拖动的未装饰窗口。 我需要设置一个自定义标题栏样的小部件来拖动窗口。我已经读到它是可行的,并看到它在使用Python而不是Vala进行操作 我想使添加和关闭之间的区域可拖动-这是一个Gtk水平框 我需要帮助在瓦拉实现这一点。请帮忙 提前感谢。GTK+支持客户端装饰,这意味着您提供的是窗口装饰而不是窗口管理器。这是通过gtk\u window\u set\u titl

这似乎是一个简单的问题。我是Gtk和Vala编程的初学者。我也是一个初学者程序员。我从ValaGTKGUI开始,现在我有了一个不可拖动的未装饰窗口。 我需要设置一个自定义标题栏样的小部件来拖动窗口。我已经读到它是可行的,并看到它在使用Python而不是Vala进行操作

我想使添加和关闭之间的区域可拖动-这是一个Gtk水平框

我需要帮助在瓦拉实现这一点。请帮忙

提前感谢。

GTK+支持客户端装饰,这意味着您提供的是窗口装饰而不是窗口管理器。这是通过
gtk\u window\u set\u titlebar()
完成的,它使用任意GtkWidget作为标题栏

GTK+提供GtkHeaderBar,这是一个完整的标题栏,您可以向其中添加任意小部件(与GtkBox的方式相同)。您可能已经看到许多GNOME程序使用它们了。您的屏幕截图看起来像是GtkHeaderBar的工作,添加按钮放在开始,关闭按钮放在结束。只要把它设为GtkWindow的标题栏,你就可以走了。(您可能还需要删除标准的最小化/最大化/关闭按钮;GtkHeaderBar方法也适用于此。)


当然,GtkHeaderBar在默认情况下看起来像标准的窗口管理器装饰。您可以使用CSS来更改外观,甚至可以更改headerbar内按钮的外观(仅限)。你评论中的截图显示你已经做到了;干得好

是的,但装饰效果更好。添加和关闭按钮的布局让人觉得你想使用GtkHeaderBar而不是完全没有装饰的窗口
Gtk.Window.set_titlebar()
将窗口的标题栏更改为任意小部件,例如标题栏。除此之外,您还需要捕获窗口本身上的鼠标事件,并在每次重新定位窗口。在多花一点代码之后,这就是我的小小编码技能开始形成的样子@JensMühlenhoff它会以这种方式在所有Linux发行版上工作吗,除了那些使用Wayland?的人之外,@andlabs非常感谢你提出使用头棒的想法。我刚用过它现在它允许我拖动窗口@oldtechaa是的,因为我的想法奏效了,我把它变成了一个更详细的答案=P