如何将 Gtk::Entry 打包到 Gtk::HeaderBar 中,以便条目完全填满 header 栏?
How do I pack a Gtk::Entry into a Gtk::HeaderBar so the entry completely fills the header bar?
我正在 gtkmm-3.0
中制作一个程序,其中有一个 Gtk::HeaderBar
作为标题栏。
我正在尝试使用以下代码将 Gtk::Entry
打包到其中:
Gtk::HeaderBar headerBar;
Gtk::Entry entry;
headerBar.set_hexpand();
headerBar.set_halign((Gtk::Align)GTK_ALIGN_FILL);
entry.set_hexpand();
entry.set_halign((Gtk::Align)GTK_ALIGN_FILL);
headerBar.pack_start(uriEntry);
headerBar.set_show_close_button();
条目包装正确,但它只填充了 header 栏的 一半 space,这非常混乱。使用 headerBar.add(entry)
或 headerBar.pack_end(entry)
丝毫没有帮助(该条目仍然填充了它应该占用的 space 的一半)。
此外,在 headerBar.pack_start(entry)
行之前使用 headerBar.pack_start()
和 Gtk::Button
会将按钮放置在其位置,但条目将在其停止的同一点停止扩展以前,比以前短。
如何让条目填满整个 header 栏?
问题是 Gtk::HeaderBar
也有一个使用 space 的“标题”小部件。您可以设置一个标题,结果是:
你明白为什么只有一半的屏幕给条目了。一种解决方法是定义您自己的自定义 header 栏。这是一个极其简单的例子:
#include <gtkmm.h>
class MainWindow : public Gtk::ApplicationWindow
{
public:
MainWindow();
private:
Gtk::Box m_customHeaderBar;
Gtk::Entry m_entry;
};
MainWindow::MainWindow()
{
m_entry.set_hexpand_set(true);
m_entry.set_hexpand();
m_customHeaderBar.pack_start(m_entry);
set_titlebar(m_customHeaderBar);
}
int main(int argc, char *argv[])
{
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");
MainWindow window;
window.show_all();
return app->run(window);
}
结果是:
当然,您必须自己添加一个关闭按钮和所有内容(我建议制作 class)。这部分就交给你了。
我正在 gtkmm-3.0
中制作一个程序,其中有一个 Gtk::HeaderBar
作为标题栏。
我正在尝试使用以下代码将 Gtk::Entry
打包到其中:
Gtk::HeaderBar headerBar;
Gtk::Entry entry;
headerBar.set_hexpand();
headerBar.set_halign((Gtk::Align)GTK_ALIGN_FILL);
entry.set_hexpand();
entry.set_halign((Gtk::Align)GTK_ALIGN_FILL);
headerBar.pack_start(uriEntry);
headerBar.set_show_close_button();
条目包装正确,但它只填充了 header 栏的 一半 space,这非常混乱。使用 headerBar.add(entry)
或 headerBar.pack_end(entry)
丝毫没有帮助(该条目仍然填充了它应该占用的 space 的一半)。
此外,在 headerBar.pack_start(entry)
行之前使用 headerBar.pack_start()
和 Gtk::Button
会将按钮放置在其位置,但条目将在其停止的同一点停止扩展以前,比以前短。
如何让条目填满整个 header 栏?
问题是 Gtk::HeaderBar
也有一个使用 space 的“标题”小部件。您可以设置一个标题,结果是:
你明白为什么只有一半的屏幕给条目了。一种解决方法是定义您自己的自定义 header 栏。这是一个极其简单的例子:
#include <gtkmm.h>
class MainWindow : public Gtk::ApplicationWindow
{
public:
MainWindow();
private:
Gtk::Box m_customHeaderBar;
Gtk::Entry m_entry;
};
MainWindow::MainWindow()
{
m_entry.set_hexpand_set(true);
m_entry.set_hexpand();
m_customHeaderBar.pack_start(m_entry);
set_titlebar(m_customHeaderBar);
}
int main(int argc, char *argv[])
{
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");
MainWindow window;
window.show_all();
return app->run(window);
}
结果是:
当然,您必须自己添加一个关闭按钮和所有内容(我建议制作 class)。这部分就交给你了。