文章目录
- 前言
- 来看一个从字符串中生成UI的例子
前言
- glade生成的xml格式不被gtkmm4支持, 需要作修改
来看一个从字符串中生成UI的例子
-
可以把那些字符串放入一个xml文件#include <gtkmm/application.h> #include <gtkmm.h> #include <iostream> using namespace std;class ExampleWindow : public Gtk::Window { public:ExampleWindow();virtual ~ExampleWindow() {};void on_action_file_new(){cout << "New" << endl;};void on_action_file_open() {};void on_action_file_quit() {};Gtk::Box m_Box; }; ExampleWindow::ExampleWindow() {auto m_refBuilder = Gtk::Builder::create();Glib::ustring ui_info ="<interface>"" <menu id='menubar'>"" <submenu>"" <attribute name='label' translatable='yes'>_File</attribute>"" <section>"" <item>"" <attribute name='label' translatable='yes'>_New</attribute>"" <attribute name='action'>example.new</attribute>"" </item>"" </section>"" <section>"" <item>"" <attribute name='label' translatable='yes'>_Quit</attribute>"" <attribute name='action'>example.quit</attribute>"" </item>"" </section>"" </submenu>"" <submenu>"" <attribute name='label' translatable='yes'>_Edit</attribute>"" <item>"" <attribute name='label' translatable='yes'>_Copy</attribute>"" <attribute name='action'>example.copy</attribute>"" </item>"" <item>"" <attribute name='label' translatable='yes'>_Paste</attribute>"" <attribute name='action'>example.paste</attribute>"" </item>"" </submenu>"" </menu>""</interface>";//绑定行动的对应动作 实际绑定auto m_refActionGroup = Gio::SimpleActionGroup::create();m_refActionGroup->add_action("new", sigc::mem_fun(*this, &ExampleWindow::on_action_file_new));m_refActionGroup->add_action("open", sigc::mem_fun(*this, &ExampleWindow::on_action_file_open));m_refActionGroup->add_action("quit", sigc::mem_fun(*this, &ExampleWindow::on_action_file_quit));insert_action_group("example", m_refActionGroup);//行动组example 实体诞生m_refBuilder->add_from_string(ui_info);//m_refBuilder->add_from_file("K:\\CPlusPlus\\cgcc\\Xml_UI.xml");auto gmenu = m_refBuilder->get_object<Gio::Menu>("menubar");auto pMenuBar = Gtk::make_managed<Gtk::PopoverMenuBar>(gmenu);m_Box.append(*pMenuBar);set_child(m_Box);pMenuBar->set_visible(true);m_Box.set_visible(true); } int main(int argc, char* argv[]) {auto app = Gtk::Application::create("org.gtkmm.example");//app快捷键 键位设置对应行动 预先设置app->set_accel_for_action("example.new", "<Primary>n");//表示Ctrl+Napp->set_accel_for_action("example.quit", "<Primary>q");//表示Ctrl+Qapp->set_accel_for_action("example.copy", "<Primary>c");//表示Ctrl+Capp->set_accel_for_action("example.paste", "<Primary>v");//表示Ctrl+V//Shows the window and returns when it is closed.return app->make_window_and_run<ExampleWindow>(argc, argv); }
然后
m_refBuilder->add_from_file(“K:\CPlusPlus\cgcc\Xml_UI.xml”);
代替上面的add_from_string.