• 21254阅读
  • 19回复

【讨论】大家来比较一下Qt与Gtk吧 [复制链接]

上一主题 下一主题
离线aojiang
 
只看楼主 倒序阅读 楼主  发表于: 2006-01-05
优缺点
[ 此贴被XChinux在2006-01-05 22:50重新编辑 ]
离线XChinux

只看该作者 1楼 发表于: 2006-01-05
我先说说我的肤浅的看法:
语言不同, Qt采用C++, Gtk+采用C(当然,也有Gtkmm来使用C++,但还是使用C的多)
C++作为面向对象的语言,目前最成功的地方就是在GUI框架上,所以在这里使用C++的Qt显然比使用C的Gtk开发效率高,更好使用,利于代码重用,但另一方面,正是因为其使用C++,门槛比C语言高,况且C一直是类UNIX系统下的主导语言,所占优势就像以前Windows下C++所占的优势一样。语言这一层上,使得新手有时候更愿意选择易于学习的C语言并且是完全GPL的Gtk库。Qt早期因为版权方面的原因,导致许多LINUX Fans选择了Gtk+。当然,现如今,随着Qt在三个平台上的开源版的推出将大力的促进Qt的使用群。在项目上,Qt有KDE,Gtk+有GNOME,这两大项目,谁都吃不掉谁,互相学习,互相促进。这比Windows一单独大,MS说什么就什么,说VB就VB,说VC就VC,说C#就C#,使得用户不得不跟着变来得好得多。让用户有选择权。

就我个人来说,还是选择Qt,一个原因是C++,另一个原因是Qt做界面比Gtk+的好看,并且开发工具也比Gtk+的方便的多。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yfy002

只看该作者 2楼 发表于: 2006-01-06
个人认为qt开发工具安装较gtk简单,windows下如果用gtk开发,要安装许多的东西,而qt则不同,如果 gtk有个商业的公司支持,并且象qt 一样封装好可能好点。qt其实也用了些第三方的东西,不过它都随qt打包好的。
我渴望平静,风却给了我涟漪
我的blog:
http://sungaoyong.cublog.cn
离线aojiang
只看该作者 3楼 发表于: 2006-01-06
给我一个用Qt的理由先
离线XChinux

只看该作者 4楼 发表于: 2006-01-06
C++(效率,开发速度), 跨平台(当今的一大趋势), KDE(最大的软件项目之一)
OVER
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yihect

只看该作者 5楼 发表于: 2006-03-25
有人说 qt里面 虚函数泛滥,这就怪了,怎么又说效率很高?
效率高是不是因为它绕过了某些 平台提供的 东西,比如windows的特定GUI操作什么的,而直接封装了驱动程序级别的东西?不过想想不大对,它没利用windows的GUI模块的,它岂不是要封装许多特定品牌硬件的驱动?还是实现了一个和windows GUI类似的通用模块?

另外,有很多其他类型的库呢,wxWidgets什么的。
离线XChinux

只看该作者 6楼 发表于: 2006-03-25
wxWidgets,以目前来看,除非有公司坚定支持(比如Borland的BCBX),现在看用起来还没QT好用。其又基于Gtk+,这个。。。。又多一层。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线lsosa

只看该作者 7楼 发表于: 2006-03-25
虽然对具体的区别还了解得不多,但是目前为止必须用qt写东西了。所以,还需要继续学习啊。。。。。。。。。。。。。。。
离线yihect

只看该作者 8楼 发表于: 2006-03-26
引用第6楼XChinux2006-03-25 16:41发表的“”:
wxWidgets,以目前来看,除非有公司坚定支持(比如Borland的BCBX),现在看用起来还没QT好用。其又基于Gtk+,这个。。。。又多一层。


多一层吗?

其实我可能只需要qt中的GUI部分。原来考虑其他的业务对象,通过一个单独的数据库访问层访问数据库间接存取的,不过如果直接用qt中sql模块的话,又回归到在程序代码中操作SQL的老路了,而且可能还要自定义model-view结构中的 model,来支持qt中的数据感知widget,感觉比较烦。。另外能不能方便的在qt中使用原来的dll?而且如果在原有DLL中封装odbc的话,不就又不是platform independent了吗?

今天下载wxWidget了,准备先看看,不过要编译的话,我就必须先删掉qt以腾出空间,唉。。
qt做出的界面比原来MFC中的确实漂亮许多,MFC做GUI也麻烦的很,听说wxWidget至少可能比MFC方便点。
离线sinl

只看该作者 9楼 发表于: 2006-03-27
讨论来讨论去,都没有涉及到要害
离线ak47++
只看该作者 10楼 发表于: 2006-05-21
Re:【讨论】QT与MFC的比较
离线fucyou

只看该作者 11楼 发表于: 2006-07-20
离线fucyou

只看该作者 12楼 发表于: 2006-07-20
GNOME获得商业公司和更多自由程序员支持,不知道将来谁会更胜一筹

qt和gtk又会怎么发展?
离线igoo
只看该作者 13楼 发表于: 2006-07-21
qt确实是有点慢,能感觉到;感觉光应用程序的启动就吃力。
离线woody_su
只看该作者 14楼 发表于: 2006-07-25
以个人在台式机器上使用KDE 和GNOME的经验 以个人在嵌入平台上写QT程序和GTK程序的经验
GTK2.x又慢开发效率又低, 虽然是C写的 但是层层包装 绕来绕去....效率很低
能把一个GUI开发得又慢又难用 实在也是不容易的事啊.....
如果 说QT比GTK2慢,我个人觉得 在我跑过的几个平台上是不成立得。
另外GTK2无法直接画FB,(曾经有,但是后来设计上的缺陷停止开发了,现在可以跑在DFB上),而QT可以直接运行在FB上,所以在嵌入式上GTK从技术角度上是无法和QT比的。另外如果要优化GTK2让其在嵌入式上,则会失去很多特效变得灰头土脸(其实GTK的程序一直给我的印象就是灰头土脸,或许这个是KDE和GNOME的对比给我的印象吧)。 当然GTK也有在成功案例比如NOKIA770(如果没有记错的话就是那个类似微缩版的table PC)....只是偶认为那是NOKIA出于商业上的考量(授权),俺觉得换成QT4会做得更好 :)
[ 此贴被woody_su在2006-07-25 15:34重新编辑 ]
离线sdkinger

只看该作者 15楼 发表于: 2007-05-21
学习了!
离线didida
只看该作者 16楼 发表于: 2007-05-21
不管怎么样,工作需要qt,俺就qt了
离线蛮蛮
只看该作者 17楼 发表于: 2007-05-25
好不容易找到了这个帖子,觉得缺点说地不多呀,都是说优点,都不深谈下缺点。
蛮蛮工作室
离线keisuo

只看该作者 18楼 发表于: 2007-05-28
QT 是 X窗口系统下很完善的图形库,在此之前,OSF/Motif曾经是占主导地位的高层图形库,并且形成了商业的标准。一些商业 UNIX系统上的使用的通用桌面环境便是基于Motif的,软件JAVA、Netscape等等都使用了Motif。使一些早期的程序能够在 QT中重用是一个比较有兴趣的话题。
GTK,作为与 QT 并存的另外一套图形库,深受C程序员的喜爱。在同一程序中使用 QT 和 GTK,甚至是其它图形库,对于编写嵌入式(Embeded)程序是十分有意义的。这也正式本文章所阐述的主题。

嵌入式程序的概念

嵌入式程序一般没有自己的主循环体,它直接使用窗口的ID来嵌入到其它窗口中。在 Xlib 层次上,使用函数 XReparentWindow 重新设置一个窗口的父窗口:

        XReparentWindow(Display *display, Window w,
            Window parent, int x, int y)



即可以把窗口 w 嵌入到窗口 parent 中。

嵌入式程序一般使用动态库载入的方法,这样使用任何X窗口系统下的图形库,都可以通过输出(Export)其窗口ID的方法和其它程序库协同工作。嵌入程序需要父窗口来管理窗口的一些操作,如窗口的尺寸管理,键盘聚焦等等。一个完整的应用程序也可以嵌入到其它窗口中,一般地,建立主窗口时使窗口不受管理,然后使用XReparentWindow()设置父窗口。






回页首




在 QT 中使用 Motif

在 QT 2.x 版本中有一个 QT 的 Xt/Motif 的扩展,它可以使用户编写同时支持 Xt/Motif 和 Qt 的程序。QT 对于Xt/Motif 的扩展是建立了类 QXtWidget 和类 QXtApplication,它主要处理了嵌入窗口的底层事件。

建立一个以 QT 为主的包含Motif组件(Widget)的程序,只要使用QXtApplication 建立主程序,设置一个可以包含QT和Motif窗口的主窗口即可,例如:

        QXtApplication app(argc, argv, "TwoEditors");
        TwoEditors m;
        app.setMainWidget(&m);
        m.show();
        return app.exec();



在 m 中设置两个窗口,一个是QT类建立的,一个是QXtWidget类建立的,

    class TwoEditors : public QMainWindow {
        QMultiLineEdit* qtchild;
        EncapsulatedXtWidget* xtchild;
        public:
        TwoEditors() : QMainWindow( 0, "mainWindow") {
            QPopupMenu* file = new QPopupMenu( this );
            file->insertItem("E&xit", qApp, SLOT( quit() ) );
            menuBar()->insertItem( "&File", file );
            statusBar();
            QSplitter* splitter = new QSplitter( this );
            splitter->setOpaqueResize( TRUE );
            setCentralWidget( splitter );
            xtchild = new EncapsulatedXtWidget( splitter );
            qtchild = new QMultiLineEdit( splitter );
            qtchild->setText(QTEDMSG);
        }
    };







回页首




在 QT 中使用 GTK

在 QT 中使用 GTK 稍复杂一些,主要是因为必须把 QT 的主循环和 GTK 的主循环融合到一起比较复杂。在软件包 QGtkWidget 中,作者使用了 GTK 的一部分代码,QT的一部分代码和KDE的一部分代码,构造了 QGtkWidget 类和 QGtkApplication类。

编写程序的结构和上面的例子类似,

    QGtkApplication a( argc, argv );
    QMainWindow *wnd=new MainWnd();
    QPushButton *Qt=new QPushButton("This is Qt!", wnd);
    QGtkWidget *Gtk=new QGtkWidget(wnd);
    wnd->resize(200,100);
    Qt->setGeometry(0,0,100,50);
    Gtk->setGeometry(100,0,100,100);
    GtkWidget *box=gtk_vbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(Gtk->getGtkWidget()), box);
    GtkWidget *b=gtk_button_new_with_label("This is GTK!");
    gtk_box_pack_start(GTK_BOX(box), b, TRUE, TRUE, 0);
    gtk_widget_show(b);
    gtk_widget_show(box);
    wnd->show();
    a.setMainWidget( wnd );
    gtk_widget_show(b);
    gtk_widget_show(box);
    return a.exec();
离线tczqx
只看该作者 19楼 发表于: 2009-04-03
企业使用qt进行商业化运作的时候,是需要付版权费用的,而且价格昂贵。。所以,小心企业开发,大部分是用gtk+  虽然GTK现在很多东西还相当不成熟。。毕竟是免费的,很大程度上可以降低成本,提高产品竞争力
快速回复
限100 字节
 
上一个 下一个