我正在使用GTK4.8.3构建一个图形用户界面应用程序.我想要两个ScrolledWindow,其中一个(包含ListBox)可以水平扩展,而另一个(包含Button)不能.更准确地说,我想将按钮的功能限制在hexpand.

从GTK文档中,我知道有Setting hexpand explicitly will override the automatic expand behavior个.

当我使用下面的代码片段创建小部件并try 限制水平扩展时,我的按钮仍然可以水平扩展,以及它的父ScrolledWindow.为什么会出现这种情况?我如何才能修复它?

let hyphens_scrollbox = ListBox::builder()
    .width_request(windows::WIDTH)
    .hexpand(true)
    .build();

let hyphens_scrollwindow = ScrolledWindow::builder()
    .width_request(windows::WIDTH)
    .height_request(customising::SCROLL_HEIGHT)
    .hexpand(true)
    .vexpand(true)
    .hscrollbar_policy(PolicyType::Never)
    .vscrollbar_policy(PolicyType::Always)
    .child(&hyphens_scrollbox)
    .build();

let details_scrollwindow = ScrolledWindow::builder()
    .width_request(windows::WIDTH)
    .height_request(entries::CONTAINER_HEIGHT)
    .hscrollbar_policy(PolicyType::Never)
    .vscrollbar_policy(PolicyType::Automatic)
    .hexpand(false)
    .child(&details_scrollbox)
    .build();

let new_button = Button::builder()
    .label("Add new group")
    .margin_bottom(buttons::MARGIN)
    .hexpand(false)
    .build();

details_scrollwindow.append(&new_button);

let defaultsbox = GtkBox::builder()
    .orientation(Orientation::Vertical)
    .width_request(windows::WIDTH)
    .build();

defaultsbox.append(&hyphens_scrollwindow);
defaultsbox.append(&details_scrollwindow);

推荐答案

出于某种非常令人困惑的原因,似乎在"扩展"属性和几乎没有文档记录的gtk4::Align property之间存在着某种关系.

通过设置此gtk4::Align属性以及按钮上的hexpand,我可以让您的 case 按您希望的方式工作.例如:

let new_button = Button::builder()
    .label("Add new group")
    .margin_bottom(buttons::MARGIN)
    .hexpand(false)
    .halign(Align::Start)
    .build();

视觉上:

Not expanding

免责声明:我不知道Rust,我在这里没有任何东西可以测试这段代码.如果它不起作用,请告诉我.我只能在C++中try .

Rust相关问答推荐

如何从polars DataFrame中获取一个列作为Option String?<>

为什么复印是豆荚的一个重要特征?

是否有可能同时避免不兼容的不透明类型和代码重复?

何时可以在Rust中退出异步操作?

为什么允许我们将可变引用转换为不可变引用?

在Rust中,在实现特征`Display`时,如何获取调用方指定的格式?

如何为 struct 字段设置新值并在Ruust中的可变方法中返回旧值

完全匹配包含大小写的整数范围(&Q;)

通过RabbitMQ取消铁 rust 中长时间运行的人造丝任务的策略

在Rust中声明和定义一个 struct 体有什么区别

在运行特定测试时,如何 suppress cargo test 的空输出?

Cargo.toml:如何有条件地启用依赖项功能?

根据掩码将 simd 通道设置为 0 的惯用方法?

为什么我可以使用 &mut (**ref) 创建两个实时 &mut 到同一个变量?

将 &str 或 String 保存在变量中

在 Rust 中查找向量中 dyn struct 的索引

Rust 程序中的内存泄漏

没有得到无法返回引用局部变量`queues`的值返回引用当前函数拥有的数据的值的重复逻辑

隐式类型闭包的错误生命周期推断

编写 TOML 文件以反序列化为 struct 中的枚举