LINUX应用GUI开发C++ 之gtkmm4(1)

news2024/9/30 5:26:35

目录

    • 概述
      • GTK
      • gtkmm
    • 安装gtkmm4
    • hello,world
    • codelite配置
    • 代码解释

概述

GTK

GTK是一个小部件工具包。GTK创建的每个用户界面都由小部件组成。这是在C语言中使用GObject实现的,GObject是一个面向对象的C语言框架。窗口小部件是主容器。然后通过向窗口中添加按钮、下拉菜单、输入字段和其他小部件来构建用户界面。如果要创建复杂的用户界面,建议使用GtkBuilder及其特定于GTK的标记描述语言,而不是手动组装界面。

  • GTK是事件驱动的。工具包侦听事件,例如单击按钮,并将事件传递给应用程序。
  • GTK对所有文本使用UTF-8编码。这确保您可以使用您的母语或世界各地的任何其他语言开发应用程序。
  • GTK支持HiDPI显示。为已经定义良好的用户体验增添了一份力量。可以在GTK应用程序中启用高DPI支持。
  • GTK将始终使用最有效的方式绘制应用程序,以最大化性能并利用硬件
  • 在GTK中,指针和触摸事件被无缝处理,使您的应用程序可以在各种输入设备上开箱即用。
    在这里插入图片描述

gtkmm

gtkmm是流行GUI库GTK的官方C++接口。亮点包括类型安全回调,以及一组易于通过继承进行扩展的小部件。您可以使用Gtk::Builder在代码中或使用Glade用户界面设计器创建用户界面。有大量的文档,包括API参考和教程。

gtkmm是根据GNU较宽松通用公共许可证(LGPL)发布的自由软件。

特色
使用继承来派生定制的组件。
类型安全的信号句柄,而且是标准 C++。
多态。
使用标准 C++ 库,包括字符串、容器和迭代器。
通过 UTF8 完全的支持国际化。
完全的 C++ 内存管理
对象组合(Object composition)
自动释放动态分配的组件。
完全使用了 C++ 的命名空间(namespaces)。
没有宏(MACRO)
Cross-platform: Linux (gcc), FreeBSD (gcc), NetBSD (gcc), Solaris (gcc, Forte), Win32 (gcc, MSVC 2013 or later (gtkmm3), MSVC 2017 or later (gtkmm4)), MacOS X (gcc), others
自由免费的软件,无论是开发开源软件还是闭源软件,都是免费的。

安装gtkmm4

$ sudo dnf install gtkmm4.0*

hello,world

1、codelite新建项目
在这里插入图片描述
输入代码

#include <gtkmm.h>

class HelloWindow : public Gtk::Window
{
public:
  HelloWindow();
};

HelloWindow::HelloWindow()
{
  set_title("hello,world");
  set_default_size(200, 200);
}

int main(int argc, char* argv[])
{
  auto app = Gtk::Application::create("HelloGtkMN");

  return app->make_window_and_run<HelloWindow>(argc, argv);
}


命令行编译运行

$ g++ main.cpp  -o simple `pkg-config --cflags --libs gtkmm-4.0` -std=c++17
$ ./simple

必须用反引号括住pkg配置调用。反引号使shell在它们内部执行命令,并将命令的输出作为命令行的一部分。

在这里插入图片描述

codelite配置

在这里插入图片描述在这里插入图片描述

代码解释

所有gtkmm程序必须包含某些gtkmm标头;gtkmm.h包括整个gtkmm套件。

#include <gtkmm.h>

定义HelloWindow类。

class HelloWindow : public Gtk::Window
{
public:
  HelloWindow();
};

它的默认构造函数设置窗口的标题和默认(初始)大小。

HelloWindow::HelloWindow()
{
  set_title("hello,world");
  set_default_size(200, 200);
}

创建Gtk::Application对象,存储在Glib::RefPtr智能指针中。这在所有gtkmm应用程序中都需要。此对象的create()方法初始化gtkmm。

int main(int argc, char* argv[])
{
  auto app = Gtk::Application::create("HelloGtkMN");

  return app->make_window_and_run<HelloWindow>(argc, argv);
}

最后一行创建并显示一个窗口,并进入gtkmm主处理循环,该循环将在窗口关闭时完成。然后,main()函数将返回相应的成功或错误代码。当调用make_window_and_run()时,可以检查在命令行上传递给应用程序的argc和argv参数,但这个简单的应用程序不使用这些参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/370619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Studio中创建java工程

1. 前言 电脑环境: Ubuntu 18.04 开发工具环境:Android Studio 4.1.3 版本 经常要使用验证Java API, 把配置环境步骤记录一下 2. 创建步骤 2.1 新建一个Android Studio App工程 New ---> New Project ---> 选择一个Activity主题---> Finish 就创建ok 2.2 …

如何防护DDOS攻击

DDOS攻击的趋势呈现出明显的增长趋势&#xff0c;特别是在网络攻击技术的发展和攻击者的技术水平提高的情况下&#xff0c;DDOS攻击的发生频率和规模也在不断增加。此外&#xff0c;随着网络技术的发展&#xff0c;攻击者也可以利用更多的技术手段来实施DDOS攻击&#xff0c;比…

kali环境搭建

一、渗透为什么要使用kali&#xff1f; 1、系统开源 kali linux实际上是开源的操作系统&#xff0c;其中内置了几百种工具而且是免费的&#xff0c;可以非常方便的为测试提供上手即用的整套工具&#xff0c;而不需要繁琐的搭建环境&#xff0c;及收集工具下载安装等步骤 2、系统…

通过OpenAI来做机械智能故障诊断-测试(1)

通过OpenAI来做机械智能故障诊断 1. 注册使用2. 使用案例1-介绍故障诊断流程2.1 对话内容2.2 对话小结3. 使用案例2-写一段轴承故障诊断的代码3.1 对话内容3.2 对话小结4. 对话加载Paderborn轴承故障数据集并划分4.1 加载轴承故障数据集并划分第一次测试4.2 第二次加载数据集自…

【华为OD机试模拟题】用 C++ 实现 - 挑选字符串(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…

浅谈对于封装、继承与多态的理解(Java)

目录 封装 继承 父类成员的访问 如何在子类中访问父类同名的成员 子类构造方法 代码块在继承上的执行顺序 多态 多态的实现条件 重写 多态的优缺点 面向对象程序的三大特征&#xff1a;封装继承和多态。 封装 封装&#xff1a;将数据和操作数据的方法进行有效…

前置知识-辛几何与辛代数、欧式几何与辛几何、Hamilton量

1.3 Hamilton 系统的辛几何算法 1.3.1 辛几何与辛代数的基本概念(下篇) 定义(辛空间、辛映射) 设 V V V 是定义在实数域 R \mathbb{R} R<

【万能排序之qsort、b_sort 、s_sort】

文章目录前言:star:qsort函数函数参数qsort函数的使用:star:模拟实现万冒泡排序函数参数模拟实现b_sort注意点:star:模拟实现万能选择排序函数参数模拟实现s_sort最后前言 我们所熟悉的冒泡排序&#xff0c;选择排序&#xff0c;插入排序&#xff0c;二分排序等都是基于给定的一…

计算机网络笔记、面试八股(一)——TCP/IP网络模型

Note&#xff1a;【计算机网络笔记、面试八股】系列文章共计5篇&#xff0c;现已更新3篇&#xff0c;剩余2篇&#xff08;TCP连接、Web响应&#xff09;会尽快更新&#xff0c;敬请期待&#xff01; 本章目录1. TCP/IP网络模型1.1 应用层1.1.1 应用层作用1.1.2 应用层有哪些常用…

git push origin master 情况

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3;哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d;一位上进心十足的【Java ToB端大厂领…

局域网内浏览器实现远程控制windows设备的解决方案

使用VNC技术实现的局域网内windows远程桌面项目用途服务端的技术实现1. 安装UItraVNC软件&#xff0c;只部署server端即可2. 为UItraVNC设定自定义密码Python 环境的安装Websockify 的使用使用nssm工具将run.bat注册为系统服务&#xff0c;并开机自启结束&#xff0c;这里就是服…

华为OD机试用Python实现 -【查找树中的元素 or 查找二叉树节点】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲查找树中的元素 or 查找二叉树节点题目描述输入描述输出描述说明示例一输入输出示例二输入输出Python 代码实现代码编写思路华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 O…

啊哈 算法读书笔记 第 2 章 栈、队列、链表

第 2 章 栈、队列、链表 目录 第 2 章 栈、队列、链表 队列&#xff1a; 解密回文——栈 纸牌游戏&#xff1a; 链表 模拟链表 队列&#xff1a; 首先将第 1 个数删除&#xff0c;紧接着将第 2 个数放到这串数的末尾&#xff0c;再将第 3 个数删除并将第 4 个数放到这串…

axios 中如何取消请求_从使用到原理_番茄出品

start 最近频繁遇到一个问题&#xff0c;axios 是如何取消请求的&#xff1f;这篇文章将从新手小白的视角出发&#xff0c;从 axios 取消逻辑的基础使用&#xff0c;到原理分析&#xff0c;带你彻底了解并掌握 axios 中取消请求的“秘密”。编写时间&#xff1a;2023/02/24-23…

Prometheus -- 浅谈Exporter

Prometheus系统 – Exporter原理 为什么我们需要Exporter&#xff1f; 广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target&#xff0c;如下所示&#xff0c;Prometheus通过轮询的方式定期从这些target中获取样本…

你知道Java架构师学习路线该怎么走吗?你所缺少的是学习方法以及完整规划!

怎么成为一名Java架构师&#xff1f;都需要掌握哪些技术&#xff1f;Java架构师&#xff0c;首先要是一个高级Java攻城狮&#xff0c;熟练使用各种框架&#xff0c;并知道它们实现的原理。jvm虚拟机原理、调优&#xff0c;懂得jvm能让你写出性能更好的代码;池技术&#xff0c;什…

java 面向对象三大特性之多态 万字详解(超详细)

目录 前言 : 一、为什么需要多态 : 1.白璧微瑕 : 2.举栗&#xff08;请甘雨,刻晴,钟离吃饭&#xff09;: 3.代码 : 4.问题 : 二、什么是多态 : 1.定义 : 2.多态的实现步骤&#xff08;重要&#xff09; : 三、多态的使用 : 1.多态中成员方法的使用&#xff08;重要…

一块GPU搞定ChatGPT;ML系统入坑指南;理解GPU底层架构

1. 跑ChatGPT体量模型&#xff0c;从此只需一块GPU 在发展技术&#xff0c;让大模型掌握更多能力的同时&#xff0c;也有人在尝试降低AI所需的算力资源。最近&#xff0c;一种名为FlexGen的技术因为「一块RTX 3090跑ChatGPT体量模型」而获得了人们的关注。 虽然FlexGen加速后的…

Java 修饰符和多态

文章目录一、修饰符1. 权限修饰符2. 状态修饰符2.1 final2.2 static二、多态1. 成员访问特点2. 多态中的转型3. 多态案例一、修饰符 1. 权限修饰符 2. 状态修饰符 2.1 final final 关键字是最终的意思&#xff0c;可以修饰成员方法、成员变量及类。 //1.修饰成员变量 publi…

Git ---- IDEA 集成 Git

Git ---- IDEA 集成 Git1. 配置 Git 忽略文件2. 定位 Git 程序3. 初始化本地库4. 添加到暂存区5. 提交到本地库6. 切换版本7. 创建分支8. 切换分支9. 合并分支10. 解决冲突1. 配置 Git 忽略文件 1. Eclipse 特定文件 2. IDEA 特定文件 3. Maven 工程的 target 目录 问题1…