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

文章目录

前言

  • 新手刚刚使用时的笔记

Cambalache检查Xml

  • 窗口右键inspect UI Definition切换到Xml视图, 可以全选复制粘贴到你的ui文件里, Cambalache 只能保存为.cmb工程文件, 导出也不知道导出到哪

.cpp文件如何写才能显示UI

  • 首先creat

    cpp 复制代码
    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里的对象

    cpp 复制代码
    //这里的mainWindow 在Cambalache的 属性 Object id 条目中指定
    refBuilder->get_widget<Gtk::Window>("mainWindow");
    //获取的是一个实体的指针, 已经存在 并且具有在ui设计器里的父子关系
  • 显示
    需要获取最上层的对象然后 set_child(最上层的对象)
    或者app->add_window(window) 这是两种方法

  • 第一种

    cpp 复制代码
    //官网例子常见的
    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

  • 第二种

    cpp 复制代码
    #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的构造函数中

    cpp 复制代码
    mainWinodw = refBuilder->get_widget<Gtk::Window>("mainWindow");
    my_app->add_window(*mainWinodw);
    mainWinodw->set_visible(true);

    可以完全用ui里的主窗口

相关推荐
Oll Correct10 小时前
Adobe illustrator 案例十一:城堡图标绘制
ui·adobe·illustrator
沫璃染墨1 天前
《Qt从零入门系列(十四):QThread多线程详解——从线程创建到客户端阻塞处理》
开发语言·c++·笔记·qt·ui·交互·线程
特立独行的猫a2 天前
仓颉语言GUI开发实战:用仓颉写串口/网络二合一调试助手
网络·ui·gui·harmonyos·tauri·仓颉
wuyk5553 天前
PyQt6-第05讲-QtDesigner工作流与ui文件
python·ui·pyqt
Meta Luo3 天前
UI 自动化测试中的等待、超时和异步加载怎么处理
功能测试·测试工具·ui·回归·自动化
Light Gao3 天前
AI 对话助手如何实现动态交互?一文讲清 AG-UI、SSE、组件与工具调用
人工智能·ui·交互·大语言模型·sse·智能体·ag-ui
MicrosoftReactor3 天前
技术速递|当聊天框不再是合适的交互界面
ui·ai·copilot·canvas
秋名山小白3 天前
UI自动化-Airtest框架落地实战
运维·ui·自动化
const_qiu3 天前
第 2.5 章 2.5.8:质量关 —— 安全审查、UI/UX 审查与踩坑复盘
java·人工智能·安全·ui·ux
Autumn_ing4 天前
Design.md生成UI怎么验收?举例运营后台的颜色、状态和数据核对
前端·ui·ai·设计系统·paico·ai生成ui·design.md