在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);
我希望在按钮保持原位的同时将标签向左推。我该怎么办?
答案 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.