我们如何在 GTKmm 中添加 "Spacer"s?
How do we add "Spacer"s in GTKmm?
在 Qt 中,如果您希望单个布局中的小部件在物理上分开,您可以在它们之间添加一个间隔符,我们在 GTKmm 中有类似的东西吗?
这里的标签(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);
我希望将标签进一步向左推,而按钮保留在原位。我该怎么做?
您是否尝试过使用其中一种 add_label
方法?它们允许您设置标签的对齐方式。
来自here:
void add_label (const Glib::ustring& label, bool mnemonic=false, double x_align=0.5, double y_align=0.5)
Add a Label object.
void add_label (const Glib::ustring& label, bool mnemonic, Align x_align, Align y_align=ALIGN_CENTER)
Add a Label object.
目前,您的标签小部件的宽度已达到容纳文本所需的宽度,并且小部件在可用 space 中居中。 (标签两侧的 space 是 HBox
的一部分。)
-----------------------------------------------
| | Label | | Button || Button ||
-----------------------------------------------
^^^^^^^^ ^^^^^^^^
These spaces are the padding that was expanded, as requested.
要使文本一直显示在左侧,您需要更改该设置。我可以提供两种选择。
展开小部件并移动文本
让标签小部件填充可用的 space 可能有用(对于鼠标事件?),完全隐藏 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
在 Qt 中,如果您希望单个布局中的小部件在物理上分开,您可以在它们之间添加一个间隔符,我们在 GTKmm 中有类似的东西吗?
这里的标签(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);
我希望将标签进一步向左推,而按钮保留在原位。我该怎么做?
您是否尝试过使用其中一种 add_label
方法?它们允许您设置标签的对齐方式。
来自here:
void add_label (const Glib::ustring& label, bool mnemonic=false, double x_align=0.5, double y_align=0.5)
Add a Label object.
void add_label (const Glib::ustring& label, bool mnemonic, Align x_align, Align y_align=ALIGN_CENTER)
Add a Label object.
目前,您的标签小部件的宽度已达到容纳文本所需的宽度,并且小部件在可用 space 中居中。 (标签两侧的 space 是 HBox
的一部分。)
-----------------------------------------------
| | Label | | Button || Button ||
-----------------------------------------------
^^^^^^^^ ^^^^^^^^
These spaces are the padding that was expanded, as requested.
要使文本一直显示在左侧,您需要更改该设置。我可以提供两种选择。
展开小部件并移动文本
让标签小部件填充可用的 space 可能有用(对于鼠标事件?),完全隐藏 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