You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GTK4中如何用GtkBox替代已弃用的GtkToolbar创建HeaderBar下方工具栏?

在GTK4中用GtkBox实现HeaderBar下方的工具栏

GTK4已移除GtkToolbar,且GtkWindow并不支持type="toolbar"的子控件声明,你之前的代码里这个标签下的内容不会被渲染,所以看不到效果。正确的实现方式是通过垂直容器嵌套来布局:将HeaderBar设为窗口的标题栏,然后在窗口的主内容区域使用一个垂直方向的GtkBox,把你的自定义工具栏(水平方向GtkBox)放在这个垂直容器的顶部,这样就能让工具栏紧贴HeaderBar下方。

以下是修正后的UI代码示例:

<object class="GtkApplicationWindow">
  <!-- 设置HeaderBar为标题栏 -->
  <child type="titlebar">
    <object class="GtkHeaderBar" id="header">
      <property name="title">示例窗口</property>
      <!-- 这里保留你原有的HeaderBar子控件,比如标题、按钮等 -->
      <child>
        <object class="GtkButton" id="header_btn">
          <property name="label">标题栏按钮</property>
        </object>
      </child>
    </object>
  </child>

  <!-- 主内容区域:垂直GtkBox,用来容纳工具栏和后续内容 -->
  <child>
    <object class="GtkBox" id="main_container">
      <property name="orientation">vertical</property>
      <property name="spacing">0</property>

      <!-- 自定义工具栏:水平GtkBox,放在垂直容器最上方 -->
      <child>
        <object class="GtkBox" id="toolbar">
          <property name="orientation">horizontal</property>
          <property name="spacing">6</property>
          <property name="margin-start">6</property>
          <property name="margin-end">6</property>
          <property name="margin-top">6</property>
          <property name="margin-bottom">6</property>

          <!-- 工具栏按钮示例 -->
          <child>
            <object class="GtkButton" id="toolbar_btn1">
              <property name="label">工具按钮1</property>
            </object>
          </child>
          <child>
            <object class="GtkButton" id="toolbar_btn2">
              <property name="label">工具按钮2</property>
            </object>
          </child>
        </object>
      </child>

      <!-- 主内容区域:这里可以放你的窗口核心内容,比如文本、列表等 -->
      <child>
        <object class="GtkLabel" id="content_label">
          <property name="label">窗口主内容</property>
          <property name="halign">center</property>
          <property name="valign">center</property>
          <property name="vexpand">True</property>
        </object>
      </child>
    </object>
  </child>
</object>

关键说明

  • 用垂直方向的GtkBox(main_container)作为窗口主内容的根容器,确保工具栏和主内容垂直排列。
  • 工具栏本身用水平方向的GtkBox实现,通过margin和spacing属性调整按钮的间距和边距,让布局更美观。
  • 主内容控件需要设置vexpand=True,这样它会占据窗口剩余的所有空间,避免工具栏被拉伸。

内容的提问来源于stack exchange,提问作者user22609924

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:36:18