c - Gtk。GtkScrolledWindow 未显示为 GtkStack 子项
问题描述
我有以下测试代码,其中包含 Gtk 和 Libhandy 库的片段。
#include <gtk/gtk.h>
#include <stdio.h>
#define HANDY_USE_UNSTABLE_API
#include <handy.h>
int main(int argc,char *argv[])
{
gtk_init(&argc,&argv);
GtkBuilder * builder = gtk_builder_new();
gtk_builder_add_from_resource(builder,
"/progname/interface/product-window.ui", NULL);
GtkWidget * window = GTK_WIDGET(gtk_builder_get_object(builder, "CcWindow"));
HdyLeaflet * leaflet = HDY_LEAFLET(gtk_builder_get_object(builder, "main_leaflet"));
GtkStack * stack = GTK_STACK(gtk_builder_get_object(builder, "stack"));
GtkWidget * swindow = GTK_WIDGET(gtk_builder_get_object(builder, "swindow"));
//hdy_leaflet_set_visible_child(leaflet, stack);
gtk_stack_set_visible_child(stack, swindow);
gtk_widget_show_all(window);
gtk_main();
g_object_unref(builder);
g_object_unref(window);
return 0;
}
它使用的 .ui 文件是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<requires lib="libhandy" version="0.0"/>
<object class="GtkApplicationWindow" id="CcWindow">
<property name="can-focus">False</property>
<property name="window-position">center</property>
<property name="default-width">980</property>
<property name="default-height">640</property>
<signal name="key-press-event" handler="window_key_press_event_cb" object="CcWindow" after="yes" swapped="yes"/>
<signal name="map-event" handler="window_map_event_cb" object="CcWindow" swapped="yes"/>
<signal name="notify::window" handler="gdk_window_set_cb" object="CcWindow" swapped="yes"/>
<child>
<object class="HdyLeaflet" id="main_leaflet">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="visible-child">stack</property>
<property name="transition-type">slide</property>
<signal name="notify::folded" handler="on_main_leaflet_folded_changed_cb" object="CcWindow" swapped="yes"/>
<child>
<object class="GtkStack" id="stack">
<property name="width-request">360</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="transition-type">crossfade</property>
<child>
<object class="GtkScrolledWindow" id="swindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="HdyClamp">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<!-- n-columns=1 n-rows=40 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="row-spacing">15</property>
<property name="column-spacing">7</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkFileChooserButton" id="product_picture_id">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="title" translatable="yes">Ավելացնել նկար</property>
<property name="width-chars">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="placeholder-text" translatable="yes">Մատակարար ID</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="name">page1</property>
<property name="title" translatable="yes">page1</property>
</packing>
</child>
<style>
<class name="background"/>
</style>
</object>
</child>
</object>
</child>
</object>
</interface>
注意如何
<child>
<object class="GtkScrolledWindow" id="swindow">
swindow 是 aGtkScrolledWindow
并且是 的子级stack
。所以这意味着如果我想显示带有所有子级的窗口,gtk_widget_show_all()
我应该首先将堆栈的可见子级设置为swindow
正确的?所以在代码中我有以下行:
gtk_stack_set_visible_child(stack, swindow);
但这会导致以下运行时错误
Given child of type 'GtkScrolledWindow' not found in GtkStack
即使在 .ui 文件中它清楚地声明GtkScrolledWindow
对象是对象的子GtkStack
对象。它只是输出一个空窗口。我尝试删除滚动窗口并在堆栈顶部添加一个简单的标签,效果很好。但是,当我添加类似 a GtkScrolledWindow
with children in 时,它就失败了。我真的不知道为什么会有任何帮助将不胜感激。
解决方案
推荐阅读
- templates - Symfony 4 Twig Set 背景图片不带附件
- javascript - 找到获得的价值我哪里错了?
- reactjs - 反应:路由器 props.match.params.id 未定义
- c - 链表递归函数
- eclipse - Eclipse Milo - writeValue(NodeId, DataValue) 非常慢
- assembly - MIPS 汇编器如何获取即时(CONSTANT)值?
- node.js - Google Drive API 无法将文件上传到特定文件夹
- python - 我应该把 Django 信号放在哪里?
- c# - 如何使用 C# selenium 单击下拉选项
- sql - 当连接字段之一在 oracle 中是多对 1 时,如何在连接 3 个表时根据最大日期获得准确的计数?