gpt4 book ai didi

c++ - 我们如何在 GTKmm 中添加 "Spacer"?

转载 作者:搜寻专家 更新时间:2023-10-31 01:25:23 25 4
gpt4 key购买 nike

在 Qt 中,如果你希望单个布局中的小部件在物理上分开,你可以在它们之间添加一个间隔符,我们在 GTKmm 中有类似的东西吗?
enter image description here

这里标签(Gtk::Label m_label;)和按钮(Gtk::Button m_open_button, m_delete_button;)在同一个盒子里( Gtk::HBox m_control_HBox;):

m_control_HBox.pack_start(m_label, Gtk::PACK_EXPAND_PADDING);
m_control_HBox.pack_start(m_open_button, Gtk::PACK_SHRINK);
m_control_HBox.pack_start(m_delete_button, Gtk::PACK_SHRINK);

我希望标签被进一步向左推,而按钮保留在原位。我该怎么做?

最佳答案

当前,您的标签小部件的宽度已达到容纳文本所需的宽度,并且该小部件在可用空间中居中。 (标签两侧的空格是 HBox 的一部分。)

-----------------------------------------------
| | Label | | Button || Button ||
-----------------------------------------------
^^^^^^^^ ^^^^^^^^
These spaces are the padding that was expanded, as requested.

要让文本一直显示在左侧,您需要更改该设置。我可以提供两种选择。

展开小部件并移动文本

让标签小部件填充可用空间,完全隐藏 HBox 可能很有用(对于鼠标事件?)。

-----------------------------------------------
|| Label || Button || Button ||
-----------------------------------------------

这可以通过将其包装从 Gtk::PACK_EXPAND_PADDING 更改为 Gtk::PACK_EXPAND_WIDGET 来实现。

不过,就其本身而言,此更改似乎没有任何作用,因为文本默认位于标签小部件的中心。所以你也想调用set_xalign() .此函数的参数是一个从 0 到 1 的浮点值,其中 0 是最左边,1 是最右边。

您的代码如下所示。

m_label.set_xalign(0.0f);                                    // <-- set text alignment
m_control_HBox.pack_start(m_label, Gtk::PACK_EXPAND_WIDGET); // <-- change packing
m_control_HBox.pack_start(m_open_button, Gtk::PACK_SHRINK);
m_control_HBox.pack_start(m_delete_button, Gtk::PACK_SHRINK);

移动标签

另一种选择是保持标签小部件的宽度,但将其一直向左移动。

-----------------------------------------------
|| Label | | Button || Button ||
-----------------------------------------------
^^^^^^^^^^^^^^^^
This space within the HBox has no widgets covering it.

首先,您要为标签提供与按钮相同的包装,Gtk::PACK_SHRINK。这里的技巧是让按钮保持在右边。这就是 pack_end() 的目的功能。从头开始包装标签,从最后开始包装按钮。

m_control_HBox.pack_start(m_label, Gtk::PACK_SHRINK);       // <-- Change packing
m_control_HBox.pack_end(m_open_button, Gtk::PACK_SHRINK); // <-- pack_end
m_control_HBox.pack_end(m_delete_button, Gtk::PACK_SHRINK); // <-- pack_end

关于c++ - 我们如何在 GTKmm 中添加 "Spacer"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56938337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com