首页 > 其他分享 >gtkmm 与 Cambalache 与 Gtk::Builder (新手向)

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

时间:2024-02-07 22:34:58浏览次数:28  
标签:Cambalache app Gtk window refBuilder child Builder

目录

前言

  • 新手刚刚使用时的笔记

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) 这是两种方法
  • 第一种
    //官网例子常见的
    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

  • 第二种
    #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里的主窗口

标签:Cambalache,app,Gtk,window,refBuilder,child,Builder
From: https://www.cnblogs.com/ComputerTech/p/18011320

相关文章

  • GTKMM 4 文件浏览对话框
    目录前言使用Gtk::FileChooserNativeGtk::FileDialoggtkmm3使用Gtk::FileChooserDialog继承Gtk::FileChooserWidget前言gtkmm4弃用了Gtk::FileChooserDialog而引进了Gtk::FileDialog有几点需求和问题:我需要选择文件夹的对话框能连文件一起显示gtkmm4依然能使用Gtk:......
  • StringBuilder
    StringBuilder可以看成是一个容器,创建之后里面的内容是可变的。当我们在拼接字符串和反转字符串的时候会使用到1基本使用publicclassStringBuilderDemo3{publicstaticvoidmain(String[]args){//1.创建对象StringBuildersb=newStringBuilder("......
  • Cambalache in Ubuntu
    目录前言aptinstallflatpak这很ok快捷方式后记前言gtkmm4相比gtkmm3有很多改革,代码也干净了许多,但在windows上开发有ui设计器那自然方便很多,但glade又不支持gtkmm4,windows上装Cambalache很是困难.各种问题都找不到答案.于是我用VMware虚拟机Ubuntu20.xx安装Cam......
  • 桌面应用开发GTK3 Glade (Python)
    目录Github官方文档简介环境配置注意版本gtk4版本Demo.pydemo.gladegtk+3版本demo.pyGithubhttps://github.com/GNOME/pygobjecthttps://gitlab.gnome.org/GNOME/pygobject官方文档https://pygobject.readthedocs.io/en/latest/简介PyGObject是一个用于将GTK+和其......
  • 桌面应用开发GTK Glade (C语言)
    目录Github教程简介可视化设计生成XML描述文件与多种编程语言兼容与IDE集成安装Glade示例demo.gladedemo.cGithubhttps://github.com/GNOME/gtkhttps://github.com/GNOME/gladegitclonehttps://github.com/GNOME/glade.git教程https://developer.gnome.org/简介G......
  • kubebuilder
    https://book.kubebuilder.io/quick-startcrd+operator定义了CRD之后,下一步就是需要一个像DeploymentControllerManager一样的监听服务,监听CRD对应资源的创建、更新、删除,而这个监听服务就是Operator。项目初始化kubebuilderinit--domaincheng.com--repogithub.com/c......
  • ClientBuilder https请求时忽略SSL证书。
    在chrome中连接https时,有时被告知不是私密链接,手动可以继续。用java代码进行https也遇到这种情况,可以 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法附完整可用代码importorg.glassfish.jersey.jackson.JacksonFeature;importjavax.net.ssl.SSLContext;im......
  • start gtkmm 4 Programming (range controls)
    目录基础解析Chapter7.RangeWidgetshttps://gtkmm.org/en/documentation.htmlhttps://gnome.pages.gitlab.gnome.org/gtkmm-documentation/index.html基础容器:容器小部件与其他小部件一样,派生自Gtk::Widget.例如Gtk::Grid可以容纳许多子小部件,因此这些小部件通常具......
  • yxyx:verilator生成波形和gtkwave查看波形
    在verilator指令的末尾要加上--trace选项,会在obj文件夹里生成对应的xxx_vcd_c.d和.o文件。在上一部分里,c语言代码里只写了逻辑部分,但是想要gtkwave查看波形,还需要在代码里增加vcd指针并记录波形。新的代码如下:#include<stdio.h>#include<stdlib.h>#include<assert.h>#i......
  • 【JAVA基础】String、StringBuilder和StringBuffer的区别——巨详细
    先给答案String是不可变的,StringBuilder和StringBuffer是可变的。而StringBuffer是线程安全的,而StringBuilder是非线程安全的。源码先看看jdk1.8中关于String、StringBuilder和StringBuffer部分的源码,我们看某个类或者某个属性是否不可变首先要看修饰类的关键字是什么,final表示不可......