gtkmm与Cambalache与Gtk::Builder(新手向)_
- 软件开发
- 2025-08-04 15:21:01

文章目录 前言Cambalache检查Xml.cpp文件如何写才能显示UI首先creat获取ui里的对象显示 前言 新手刚刚使用时的笔记 Cambalache检查Xml 窗口右键inspect UI Definition切换到Xml视图, 可以全选复制粘贴到你的ui文件里, Cambalache 只能保存为.cmb工程文件, 导出也不知道导出到哪 .cpp文件如何写才能显示UI 首先creat auto refBuilder = Gtk::Builder::create_from_file("path/to/you/xml"); //或者干脆写一个函数 Glib::RefPtr<Gtk::Builder> BuilderInit() { // Load the GtkBuilder file and instantiate its widgets: auto refBuilder = Gtk::Builder::create_from_file(); try { refBuilder->add_from_file("K:\\VM_Shared\\temp1.ui"); } catch (const Glib::FileError& ex) { std::cerr << "FileError: " << ex.what() << std::endl; return nullptr; } catch (const Glib::MarkupError& ex) { std::cerr << "MarkupError: " << ex.what() << std::endl; return nullptr; } catch (const Gtk::BuilderError& ex) { std::cerr << "BuilderError: " << ex.what() << std::endl; return nullptr; } return refBuilder; } 获取ui里的对象 //这里的mainWindow 在Cambalache的 属性 Object id 条目中指定 refBuilder->get_widget<Gtk::Window>("mainWindow"); //获取的是一个实体的指针, 已经存在 并且具有在ui设计器里的父子关系
可以看看这个例子 https://blog.csdn.net/Computer_Tech/article/details/135970006
显示需要获取最上层的对象然后 set_child(最上层的对象) 或者app->add_window(window) 这是两种方法
第一种 //官网例子常见的 auto app = Gtk::Application::create("org.gtkmm.example"); app->make_window_and_run<ExampleWindow>(argc, argv);这种就在ExampleWindow的构造函数中set_child(最上层的对象) 这个对象不能是GtkWindow 如果是, 将报错:
gtk_window_set_child: assertion ‘child == NULL || priv->child == child || gtk_widget_get_parent (child) == NULL’ failed
因为ExampleWindow自身就是主窗口
第二种 #include "test.h" //在test里面用extern声明 在这里先提前定义为nullptr Glib::RefPtr<Gtk::Application> my_app = nullptr; void on_app_activate() { ExampleWindow init; } int main(int argc, char* argv[]) { my_app = Gtk::Application::create("org.gtkmm.example"); my_app->signal_activate().connect([] () { on_app_activate(); }); return my_app->run(argc, argv); }在ExampleWindow的构造函数中
mainWinodw = refBuilder->get_widget<Gtk::Window>("mainWindow"); my_app->add_window(*mainWinodw); mainWinodw->set_visible(true);可以完全用ui里的主窗口 这里的ExampleWindow就相当于一个功能型桥接类
可以看看这个例子: 多 split 窗口 in Gtkmm4
gtkmm与Cambalache与Gtk::Builder(新手向)_由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“gtkmm与Cambalache与Gtk::Builder(新手向)_”