当前位置: 首页 > news >正文

gtkmm 与 Cambalache 与 Gtk::Builder (新手向)_

文章目录

  • 前言
  • 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

相关文章:

  • elementPlus实现动态表格单元格合并span-method方法总结
  • DC-8靶机渗透详细流程
  • 【蓝桥杯冲冲冲】[NOIP2017 提高组] 宝藏
  • react中的diff算法
  • MySQL数据库基础与SELECT语句使用梳理
  • Python flask 模板详解
  • 负载均衡下webshell连接
  • 【iOS ARKit】人形遮挡
  • 设置了.gitignore文件,但某些需要被忽略的文件仍然显示
  • ppi rust开发 python调用
  • 【软件设计师】普及软件知识产权中的商标法与专利法
  • 【开源】JAVA+Vue.js实现开放实验室管理系统
  • 识别CMS指纹与WAF识别
  • ChatGPT论文指南|ChatGPT论文写作过程中6个润色与查重提示词
  • axios get 请求 url 转码 空格转成+,导致请求失败(前端解决)
  • 机器学习系列——(十六)回归模型的评估
  • 百面嵌入式专栏(面试题)进程管理相关面试题1.0
  • 网易和腾讯面试题精选---性能和优化面试问题
  • 编辑器Zed
  • STM32单片机基本原理与应用(四)
  • 山东莒县农商银行去年收入、利润下降,资本充足率等指标增长
  • 湖北十堰市委副秘书长管聪履新丹江口市代市长
  • 上海市委常委会扩大会议传达学习习近平总书记考察上海重要讲话和在部分省区市“十五五”时期经济社会发展座谈会上的重要讲话精神
  • 涉个人信息收集使用问题,15款App和16款SDK被通报
  • 机关食堂向游客开放的重庆荣昌区,“消费市场迎来历史性突破”
  • 国产基因测序仪龙头华大智造业绩持续承压,今年有望迎来拐点?