本文主要是介绍gtkmm 与 Cambalache 与 Gtk::Builder (新手向)_,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 前言
- Cambalache检查Xml
- .cpp文件如何写才能显示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设计器里的父子关系
- 显示
需要获取最上层的对象然后 set_child(最上层的对象)
或者app->add_window(window) 这是两种方法 - 第一种
这种就在ExampleWindow的构造函数中set_child(最上层的对象)//官网例子常见的 auto app = Gtk::Application::create("org.gtkmm.example"); app->make_window_and_run<ExampleWindow>(argc, argv);
这个对象不能是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); }
可以完全用ui里的主窗口mainWinodw = refBuilder->get_widget<Gtk::Window>("mainWindow"); my_app->add_window(*mainWinodw); mainWinodw->set_visible(true);
这篇关于gtkmm 与 Cambalache 与 Gtk::Builder (新手向)_的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!