Tôi nên chọn gì: GTK + hay Qt? [đóng cửa]


88

Ai đó có thể gợi ý những cách sử dụng tốt nhất cho những thư viện ngày nay không? Nó chỉ là GUI hay chúng cũng có hỗ trợ cơ sở dữ liệu, XML, mạng, phân luồng, v.v.?

Tôi đã đọc về chúng và cân nhắc việc bắt đầu học / sử dụng một trong số chúng.

Cái nào phổ biến nhất? Sự khác biệt giữa chúng là gì? Tại sao bạn chọn cái này hơn cái kia?


20
Ban đầu, có rất nhiều tranh cãi về mô hình cấp phép Qt là GPL đầy đủ hoặc thương mại, trong khi GTK + là LGPL (vì vậy mô hình sau này dễ sử dụng hơn khi kết hợp với sản phẩm nguồn đóng của bạn). Nhưng bây giờ Qt cũng có sẵn dưới dạng LGPL IIRC, vì vậy đó không phải là lý do thực sự nữa để chọn cái này hay cái khác.
Roalt

3
Bạn cũng có thể xem câu hỏi chủ yếu liên quan này: stackoverflow.com/questions/1801074/…
Caleb Huitt - cjhuitt 12/12/09

4
Và một lần nữa một câu hỏi hay đã đóng trên stackoverflow. Tôi muốn nói thêm rằng nếu bạn cần một tiện ích HTML tích hợp tốt, bạn phải sử dụng GTK ngay bây giờ (sau khi QT 5.2 chuyển sang bộ tính năng giảm đáng kể / không thể sử dụng được) hoặc sử dụng QT và nhúng CEF Chrome vốn đang thêm nhiều thứ, phức tạp và 20MB cho ứng dụng của bạn.
Lothar

Câu trả lời:


94

Vì dường như bạn chủ yếu nhắm mục tiêu đến Linux, nên sự lựa chọn chủ yếu phụ thuộc vào ngôn ngữ lập trình bạn muốn sử dụng.

Nếu bạn viết mã bằng C, thì rõ ràng bạn sẽ sử dụng GTK +

Nếu bạn viết mã bằng C ++, hãy chọn Qt, nếu không, bạn sẽ cần Gtkmm (một trình bao bọc C ++ trên GTK +)

Nếu bạn viết mã bằng Python, cả GTK + và Qt đều có các ràng buộc cho ngôn ngữ: xem PyGtk , PyQtPySide ( ngôn ngữ do chính Nokia đưa ra).

Nếu bạn viết mã bằng Java, Qt không còn là một lựa chọn khả thi nữa vì Nokia đã ngừng Qt Jambi (các ràng buộc Java cho Qt).

Ngoài ra, Qt còn nổi bật hơn về API QGraphicsScene cho cảnh quay của nó , công cụ tạo tập lệnh được xây dựng trên Javascript Core (công cụ cung cấp năng lượng cho WebKit), máy trạng thái và khung hoạt ảnh cũng như giao diện người dùng khai báo .

GTK + không cung cấp nhiều như vậy mặc dù bạn có thể sử dụng Clutter cùng với nó.

Nếu bạn đang tìm hiểu cụ thể về các tính năng DB, XML (GTK + có trình phân tích cú pháp cho một tập hợp con của XML) và phân luồng (GTK + có GLib ) thì Qt sẽ cung cấp tất cả những điều đó trong QtSql , QtXmlQtConcurrent .

Tựu chung lại, tôi có thể nói Qt là một lựa chọn chắc chắn. Nhưng GTK + cũng rất có khả năng.

Tôi không chắc bạn sẽ nhận được câu trả lời rõ ràng cho câu hỏi của mình, điều này giải thích tại sao một số người lại thích Gnome hơn KDE hoặc ngược lại. Chọn những gì phù hợp nhất với bạn.

Tái bút: Tôi bạn cũng định nhắm mục tiêu Symbian, sau đó chuyển sang Qt.

CHỈNH SỬA: Một điều cũng tuyệt vời với Qt là QtWebView: nó đưa Chromium vào ứng dụng Qt của bạn để hiển thị nội dung web. Những người khác đang nhúng nội dung web vào ứng dụng của họ bằng cách sử dụng Awesomium hoặc Berkelium chẳng hạn.


Đừng quên rằng QtScript được cung cấp bởi JavaScriptCore, hiện là công cụ JavaScript nhanh nhất nhờ SquirrelFish Extreme.
CMircea

1
Về bản chỉnh sửa của bạn, có WebKitGtk + cho GTK +. Trừ khi một người trưởng thành hơn đáng kể so với người kia, tôi không nghĩ rằng sự tồn tại của QtWebKit đủ điều kiện như một lợi thế so với GTK +.
Matthew

Nếu bạn viết mã trong Ruby, hãy tìm QtRuby .
José Andias

5
gtkmmthật tuyệt, tất cả sức mạnh của GTK + nhưng sử dụng C ++ thực tế theo định nghĩa hiện đại, tạo ra mã GUI sạch nhất, dễ đọc nhất mà tôi đã thấy ... thực sự là dễ chịu nhất , bởi vì khi tôi mới bắt đầu cố gắng học lập trình GUI, chính sự ngăn nắp gtkmmđó đã phục hồi ý chí sống của tôi. Rất may, sự kiên trì đã được đền đáp và tôi phát hiện ra rằng nó cực kỳ mạnh mẽ và nó khuyến khích tôi tham gia nhiều hơn vào C ++ 14 hơn là C ++ 03. Ngoài ra, nó cũng được bảo trì tốt bởi cùng một nhà bảo trì chính trong hơn một thập kỷ AFAICT. Tôi chỉ là một người hâm mộ, không có liên kết, v.v.
underscore_d

3
Oh ... những ngày Symbian ...
daka

41

Tôi đã sử dụng GTK +, QT và wxWidgets trước đây. Đây là một bản tóm tắt ngắn gọn:

Đối với dự án giao diện người dùng đa nền tảng đầu tiên của mình, tôi quyết định sử dụng wxWidgets chủ yếu vì vào thời điểm đó giấy phép không bị hạn chế như QT (QT là GPL và chỉ dành cho Linux) và nó có giao diện người dùng dành riêng cho nền tảng (không giống như GTK). Dự án hoạt động tốt nhưng có một số trục trặc trong việc biên dịch và chạy đúng cách trên các nền tảng khác - đôi khi một số sự kiện được kích hoạt theo cách khác và tương tự như vậy. Ngoài ra GDI trong wxWidgets khá chậm.

Tiếp theo, tôi đã sử dụng GTK cho một dự án khác trong python. Đối với điều này, tôi đã sử dụng các ràng buộc python và mọi thứ diễn ra ít nhiều suôn sẻ. Tôi không hoàn toàn thích thực tế là giao diện người dùng trông không có nguồn gốc trên Windows và Mac và cũng như khi bạn khởi chạy ứng dụng GTK +, nó luôn gỡ lỗi đầu ra vô số cảnh báo CRITICAL mà dường như bạn có thể bỏ qua. :S

Cuối cùng, tôi đã thực hiện một dự án QT rất đơn giản bây giờ Nokia đã mua lại nó và rất thành công. Tốt nhất trong ba. Trước hết, nếu bạn không phải là một học sinh cũ thích VI hoặc Emacs, QtCreator rất tuyệt vời. Tôi thực sự yêu thích VI và đã sử dụng nó trong nhiều năm nhưng tôi thích QtCreator hơn cho các dự án QT C ++. Về thư viện, tôi cũng rất thích tài liệu và các API được cung cấp. QT có một khái niệm về các khe cắm và tín hiệu giới thiệu các từ khóa C ++ mới và một bộ tiền xử lý. Về cơ bản, sau khi đọc một hướng dẫn, bạn sẽ dễ dàng hiểu được nó và bắt đầu yêu thích nó. Bây giờ tôi đang làm nhà phát triển iPhone và nó có cảm giác giống với mô hình giao diện người dùng của Cocoa / Interface Builder.

Tóm tắt: Tôi sẽ xuống tay cho QT. Giấy phép khá tốt và SDK và tài liệu thực sự tốt.


13
Tôi coi việc các ứng dụng GTK + trông giống nhau trên các nền tảng khác nhau là điều tích cực vì điều đó có nghĩa là tôi không phải mất thêm tuần để tìm cách làm cho giao diện người dùng của mình tự sắp xếp chính xác với từng bộ công cụ gốc. Ngoài ra - when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S- không, nó không, trừ khi bạn đang làm sai điều gì đó không ổn. Tôi chưa từng thấy một cảnh báo quan trọng nào không xuất phát từ lỗi của riêng tôi và không dễ sửa bằng cách sử dụng đúng mã. Và tôi không nhận được thông báo gỡ lỗi nào , thậm chí không có cảnh báo
underscore_d

25

Tôi chưa bao giờ sử dụng GTK, nhưng từ kinh nghiệm cá nhân của tôi khi sử dụng Qt:

Nó không chỉ là một GUI đơn giản. Đó là một khung ứng dụng toàn bộ. Tôi đã từng nghĩ về nó như là các thư viện Java cho C ++. Nó cung cấp tất cả những gì bạn đề cập - cơ sở dữ liệu, XML, mạng và luồng, v.v. Nó cũng cung cấp những thứ như vùng chứa và trình vòng lặp, và các đối tác của một số thư viện tăng cường.

Điều làm tôi ấn tượng nhất khi bắt đầu sử dụng Qt là tài liệu vô cùng phong phú. Bạn nhận được một chương trình có tên là Qt Assistant, cung cấp tài liệu API được lập chỉ mục và có thể tìm kiếm đầy đủ trên máy tính để bàn của bạn, cũng như nhiều ví dụ và hướng dẫn về mã. Tôi thấy nó tạo ra sự khác biệt lớn trong việc tìm kiếm thông tin API mỗi lần trên web. Truy cập rất nhanh khi bạn cần nhớ một chữ ký phương thức.

Tôi không chắc cái nào là phổ biến nhất; điều đó có lẽ khó đo lường chính xác. Cả hai đều rất phổ biến. Vì Gnome là máy tính để bàn mặc định của Ubuntu và Gnome nằm trên GTK, nên rõ ràng là nó được sử dụng rộng rãi. Tất nhiên, KDE cũng rất phổ biến. Nokia đang đẩy mạnh Qt trong không gian di động - chẳng hạn như hệ điều hành Maemo của họ, được sử dụng trên N900 mới, sắp chuyển sang Qt làm bộ công cụ mặc định (hiện tại là GTK.) Tôi tin rằng Qt cũng sẽ sớm trở thành bộ công cụ mặc định cho hệ điều hành Symbian.

Tôi chưa sử dụng Qt Creator, nhưng tôi đã nghe nhiều điều hay về nó. Nó là một IDE C ++ có tích hợp nặng rõ ràng với Qt. Nó cũng có giả lập vim giả, luôn luôn tốt đẹp nếu bạn thích loại điều đó!

Qt sử dụng qmake để xây dựng cấu hình. Tôi thấy điều này đẹp hơn nhiều so với việc bạn phải viết trang điểm của riêng bạn. Tôi không biết GTK sử dụng để xây dựng những gì.

Lúc đầu, một vài điều tôi thấy có chút gì đó khó chịu với Qt là việc sử dụng nhiều macro của bộ xử lý trước. Hệ thống tín hiệu / khe cắm cung cấp một cơ chế tuyệt vời để truyền sự kiện / tin nhắn trong ứng dụng của bạn, nhưng nó có cảm giác hơi giống phép thuật mà có thể không dễ dàng di chuyển sang bộ công cụ khác nếu bạn muốn. Ngoài ra, moc (trình biên dịch siêu đối tượng), trong khi tôi không hoàn toàn chắc chắn về những gì nó làm, cũng cảm thấy hơi giống như phép thuật đang diễn ra ở hậu trường.

Nói chung, tôi muốn giới thiệu Qt, đặc biệt nếu bạn đang học. Nó có tài liệu thực sự tuyệt vời và một IDE đẹp, và các diễn đàn bận rộn. Bạn sẽ có thể xây dựng các ứng dụng C ++ rất nhanh với nó, đặc biệt là với QML có trong phiên bản 4.7.


9

Nó có thể phụ thuộc vào những gì bạn muốn làm. Tôi muốn giới thiệu Qt, vì nó không chỉ là GUI, nó có các ràng buộc Python tốt (Gtk cũng vậy) và bản thân các thư viện GUI (nói một cách chủ quan) thì Gtk dễ chịu hơn.

Mặt khác, Gtk phổ biến hơn trong thế giới linux, vì vậy bạn có thể nhận thêm trợ giúp trên web. Lý do phổ biến của Gtk có lẽ liên quan nhiều hơn đến Gnome và Ubuntu, thay vì là giá trị kỹ thuật, nhưng nếu bạn muốn phần mềm của mình kết hợp hài hòa với hai thứ đó, bạn sẽ đạt được điều đó dễ dàng hơn với Gtk.


7

Qt chắc chắn có hỗ trợ DB, mạng, phân luồng, v.v.

Tôi muốn giới thiệu nó qua GTK +.


3

Chỉ cần thêm lợi thế của QT vào các câu trả lời khác .. QT có tài liệu tuyệt vời, trình tạo IDE & GUI của riêng mình và nâng cao C ++ với một số khái niệm mới như khe cắm / tín hiệu (về cơ bản là sự kiện).

Tôi không phải là nhà phát triển GTK, vì vậy tôi không thể so sánh những thứ đó với thế giới GTK :(


11
Đối với Gtk, cũng có một trình tạo GUI là Glade ( glade.gnome.org ).
davidbe 11/12/09

3

Qt. Nó không chỉ hướng đối tượng, là hướng đối tượng "tốt". Nó dựa trên một "tập hợp con" của C ++ không dựa trên sự mù mờ của C ++ (nhưng bạn được phép gắn bó với chúng, nếu bạn thích khổ dâm;)).

Hiện tại, Nokia đã mua nó (thực ra Nokia đã làm ~ 2/3 năm trước). Nó sẽ có trong tất cả các thiết bị di động Nokia VÀ Intel (điện thoại thông minh, netbook, máy tính bảng).

Nó là xương sống của KDE, vì vậy nó rất trưởng thành, nhưng nó được thiết kế theo một cách rất linh hoạt, giúp nó có thể hỗ trợ NGAY HÔM NAY tất cả những "thứ hay ho" mới nhất mà một khuôn khổ GUI mới nhất phải có.

Cứ liều thử đi.


5
Tập hợp con? Giống hơn superset, xét về qmake và moc.
rr-

1

Có vẻ như Nokia sắp sử dụng Qt ở mọi nơi, như trên Maemo


1

Nếu bạn muốn ứng dụng của mình chạy trên iOS, Android, Blackberry, các nền tảng di động khác, Windows, Mac OSX và Linux, hãy sử dụng Qt.

qt-project.org

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.