我们如何在GTKmm中添加“ Spacer”?

时间:2019-07-08 15:38:57

标签: c++ gtkmm

在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);

我希望在按钮保持原位的同时将标签向左推。我该怎么办?

2 个答案:

答案 0 :(得分:2)

当前,标签小部件的宽度足以容纳文本,并且小部件位于可用空间的中心。 (标签两侧的空格是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

答案 1 :(得分:0)

您尝试使用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.