GTKMM 对比Qt_qt gtkmm_鹅鹅的博客-程序员宝宝

技术标签: qt  多线程  工具  wrapper  signal  gtk  

原文地址: http://guiliblearning.blogspot.com/2009/05/gtkmm-vs-qt.html

作者: demonstrate

Gtkmm 自己的手册上也对 Qt 进行了比较,另外在 FAQ 里面也有所阐述,我们在这里记录一下:

Qt 产生的时代比较早,那个时候 C++ 标准尚未成熟,而 Gtkmm 产生较晚,那个时候 C++ 标准和 STL 都比较成熟。使用 gtkmm,使用的方式更偏向于 C++ 的风格,可以使用继承、多态,并且由于 gtkmm 使用的机制(libsigc++,在对象里 composite signal 对象)能更好的利用 C++ 编译实现 type-safe,而不是依赖于运行时检查类型匹配。

在内存管理上,gtkmm 之于 Qt 稍微灵活一些,一般说来 Qt 里面通过 QWidget 一线继承下来的有一个所谓的 parent,这使得我们 new 出来的对象可以不必手工 delete,因为通过 parent 的释放,这个 QWidget 也将被自动的释放。但是这样做了,我们就不能通过自己的代码改变该 QWidget 的生存。gtkmm 提供了额外的方式,Gtk::manage()。

从继承的方式我们也知道,Qt 通过额外的 QMetaObject,这使我们在继承的时候不能遗忘 Q_OBJECT 宏以维持正常的 signal/slot 机制,同时在该分支中希望做多继承其实不必要。换言之 Qt 的设计更偏向于 Java 一些。gtkmm 虽然没用这些比较 tricky 的地方,但是也会因此丧失一些 Qt 的优点。比如 Qt 不仅仅包含一整套 GUI 设计的类库、工具,所有的外围部件,如 XML、网络等都使用的统一的设计,相同的通讯机制。而 gtkmm 充其量只算把 GUI 设计部分解决了,如果需要其他的功能,需要使用别的库,这在一定程度上对程序员提出了更高的要求,因为很可能必须自己写一个 wrapper(如果是一个 C 库,不具备 signal/slot 的能力),又或者是具有 signal/slots 能力的库,如何将两部分整合在一起呢?

有一点 Qt 通过 QMetaObject 实现的,如 signal/slot 的 auto connection,我们只需要为某个 GUI 设计好界面,然后通过多继承也好,UiTools 直接读取 ui 文件也好,不需要额外的代码,signal/slots 就连接好了,不过这也限制了这类 signal/slots 对象必须是 QObject。gtkmm 应该是不能这样实现自动连接,但是 ligsigc++ 允许将 signal 连接到普通的函数或者成员函数,这也使得我们能够比较方便的实现 signal/slot 的连接过程。

gtkmm 可能更加接近 STL,有人认为这是好事,因为标准就是好;也有人不这么认为,因为相反提供的功能比较有限,不如 Qt 很多类更适合编程人员的上手。

gtkmm 的外围工具不如 Qt 那么专门,比如 qmake、uic 和 moc;我们更常用的 pkg-config 和 autotools 将和 gtkmm 更好的协同工作。当然 Qt 的 qmake 使用 pkg-config 的也相当容易了。

Qt 似乎多线程方面做得更好一些,很多关键性的部分都有 mutex 等出现保证原子操作性,而 gtkmm 在这部分似乎做的还差的很远,因为 FAQ 里面说道倾向用单线程 -,-b

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hecssy/article/details/5045651

智能推荐

朱松纯:从人工智能的角度解读《赤壁赋》兼谈“心”与“理”的平衡_QbitAl的博客-程序员宝宝

作者 | 朱松纯北京通用人工智能研究院院长北京大学讲席教授清华基础科学讲席教授编者按:本文由北京通用人工智能研究院院长朱松纯撰写,从人工智能的角度来解读千古一赋《赤壁赋》,试图架起AI研究...

SQL简介_sql语言中,用于引导条件的短语/单词是-程序员宝宝

SQL简介 SQL语言是集DDL、DML和DCL于一体的数据库语言。 SQL语言之DDL:定义数据库SQL语言之DML:操纵数据库SQL语言之DCL:数据权限控制SQL语言主要由以下9个单词引导的操作语句来构成,但每一条语句都能表达复杂的操作请求:(1)DDL语句引导词:Create、Alter、Drop模式的定义与删除。包括定义Database、Table、View、Index和完整性约束条件等。(2)DML语句引导词:Insert、De...

数据结构-第二讲 线性结构-学习笔记(MOOC 浙江大学 陈越 何钦铭)_typedef struct polynode *polynomial_liangwenhao1108的博客-程序员宝宝

目录第二讲 线性结构2.1 线性表及其实现2.1.1 引子:多项式表示2.1.2 线性表及顺序存储2.1.3 顺序存储的插入和删除顺序存储-数组实现-code2.1.4 链式存储及查找2.1.5 链式存储的插入和删除2.1.6 广义表与多重链表顺序存储-链表实现-code2.2 堆栈2.2.1 什么是堆栈2.2.2 堆栈的顺序存储实现(数组实现)堆栈的顺序存储实现-数组实现-code2.2.3 堆栈的链式存储实现(链表实现)堆栈的链式存储实现-链表实现-code2.2.4 堆栈应用:表达式求值2.3 队列2

github随时同步代码_GitHub代码下载和同步_weixin_39559277的博客-程序员宝宝

1.下载git客户端https://git-scm.com/ssh-keygen -C "[email protected]" -t rsa2. 把下面文件的内容复制到 https://github.com/settings/keysWindows:C:\Users\GengZhaoyun\.ssh\id_rsa.pubLinux:.ssh\id_rsa.pub测试是否配制正确ssh -T gi...

[007]嵌入式学习:模数转换器-ADC_嵌入式adc-程序员宝宝

本文对模数转换器(ADC)的原理、结构和使用进行了介绍。

idea 中登录gitee账号出现Request response: 401 Unauthorized_gitee 401 u_老司机张师傅的博客-程序员宝宝

idea 中的gitee出现 Incorrect credentials. Request response: 401 Unauthorized 如图网上有的人说是邮箱没绑定,也有人说修改一下密码就好了,我则是…Login:不是账号,而是 @里面的东西, 不包括@符号...

随便推点

c语言中字符串倒序_字符串倒序输出c语言_weiwei_lol的博客-程序员宝宝

字符串倒序#include <stdio.h>#include <string.h>int main(){ char str[] = "hello,world"; int len = strlen(str); char t; int i = 0; for(i = 0;i < len/2;i++) { t = str[i]; str[i] = str[len - i - 1]; str[len - i - 1] = t; } printf("

第14周项目1-验证折半查找算法(1)_Godyi的博客-程序员宝宝

/** Copyright (c)2015,烟台大学计算机与控制工程学院* All rights reserved.* 文件名称:项目1-1.cbp* 作 者:李竹雅* 完成日期:2015年12月7日* 版 本 号:v1.0* 问题描述:验证折半查找算法* 输入描述:无* 程序输出:测试数据*/代码:#include #define MAXL 1

微信获取access_token和jsapi_ticket_小程序获取access_token_改bug的小郇的博客-程序员宝宝

之前在解决微信小程序获取access_token和jsapi_ticket时在网上找资料,没一下找到我想要的,所以自己记录下。获取accessToken微信官方网页:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.htmlpublic String getAccessToken() {String accessToken = null;//判断redis中是否有access_t

开关电源的EMC干扰不知道是怎么产生的?(开关电源EMC探析)_Me sl ·的博客-程序员宝宝

EMC的内容●基本概念:★EMC(电磁兼容性):Electromagnetic Compatibility★EMI(电磁干扰):Electromagnetic Interference★EMS(电磁抗扰性):Electromagnetic Susceptibility★ESD(静电):Electrostatic Discharges★RS(辐射抗干扰):Radiated Susceptibility★EFT(电快速瞬变脉冲群):Electronic fast transients

一阶系统开环传递函数表达式_自动控制总结:第二章、控制系统的数学模型_weixin_39846364的博客-程序员宝宝

我的公众号“每日晴天”,可关注领取我的笔记pdf版哦~------------------------------------------------------------------------------我先对控制系统的数学模型进行简单的阐述,控制系统的数学模型是描述系统输入、输出变量以及内部各变量之间关系的数学表达式。数学模型分为两种:静态和动态建立数学模型的方法:①实验法:人为给系统施加...

推荐文章

热门文章

相关标签