2010-05-11 35 views
8

Đặt ngay: Đối với những người quen thuộc với các ràng buộc ngôn ngữ trong Qt và Gtk +. Ví dụ. python và ruby. Có bất kỳ sự khác biệt về chất lượng hay khả năng nào không?Gtk + vs ràng buộc ngôn ngữ Qt

Nền tảng khác: Tôi biết C++ và Qt rất tốt. Trải nghiệm tối thiểu với Gtk +. Tôi biết C++ không phải là lý tưởng cho các ràng buộc ngôn ngữ do thiếu một ABI được xác định rõ (giao diện nhị phân ứng dụng). Tôi cũng đọc rằng Gtk + được thiết kế để bị ràng buộc với các ngôn ngữ khác. Vì vậy, tôi tự hỏi làm thế nào điều này thể hiện trong thực tế. Các ràng buộc Gtk + được duy trì tốt hơn hay hoạt động tốt hơn theo cách nào đó so với các đối tác Qt của chúng?

Tôi hiện đang khá quan tâm đến ngôn ngữ Go và họ đã bắt đầu phát triển Gtk + bindings. Tuy nhiên, ràng buộc C++ là rất xa. Nó làm cho tôi tự hỏi liệu việc học Gtk + có xứng đáng không.

+0

Còn Vala [http://live.gnome.org/Vala] thì sao? một ngôn ngữ mới tuyệt vời của nó (tốt hơn nhiều so với C++). Nó giống như C# nhưng tạo ra mã nguồn gốc và nó đặc biệt cho phát triển GTK +. – lepe

+0

Tôi đã nghĩ về nó nhưng quan tâm chính của tôi là ở Go. Có một cách mã hóa GUI là mối quan tâm thứ hai. Vala có vẻ rất C#/Java thích. Tôi sẽ thích một cách tiếp cận tươi mới tương tự như Go được xây dựng trên đầu trang của GObject. –

Trả lời

8

Tôi đã sử dụng GTK và Qt trong C++ cũng như PyGTK và PyQt bằng Python khá rộng rãi.

Qt đánh bại tay GTK - API của nó linh hoạt hơn, hiện đại và rõ ràng hơn. GTK cũng thiếu một số tính năng quan trọng đối với tôi. Từ quan điểm khung, tôi muốn giới thiệu Qt.

Đối với liên kết langauge (tôi chỉ có thể nói về Python, vì tôi chưa bao giờ sử dụng Ruby tương đương), tôi nghĩ PyGTK (sử dụng Glade và trình bao bọc như Padraig Bradys libglade) giúp lập trình GUI dễ dàng và thú vị. Tuy nhiên, nếu bạn có thể GPL phần mềm của bạn (hoặc trả phí giấy phép), thì PyQt cũng là một lựa chọn tốt, và không thân thiện như PyGTK + Glade (với GTK, bạn có thể định nghĩa giao diện người dùng của mình trong Glade dưới dạng XML riêng biệt , trong Qt nếu bạn muốn sử dụng QtDesigner, bạn phải tạo mã bằng cách sử dụng uic, nếu tôi nhớ chính xác) bản thân API thực sự rất hay để sử dụng và phản ánh thiết kế sạch của khung công tác Qt rất gần. Trên tất cả, tôi có thể khuyên bạn nên sử dụng PyQt trên PyGTK, nhưng tôi có thể thiên vị vì tôi thích Qt hơn GTK ngày nay, mặc dù bạn có thể thử cả hai và xem bạn thích cái nào - chúng gần như tầm thường để có được đang làm việc.

Nếu bạn đang tìm kiếm một cuốn sách tuyệt vời trên PyQt, tôi sẽ recomment Rapid GUI Programming qith Python and Qt.

Để tóm tắt: IMHO Qt đánh bại GTK cả về chất lượng và khả năng. Cả PyGTK và PyQt đều có chất lượng tuyệt vời và khả năng phản chiếu khuôn khổ cơ bản, mặc dù PyGTK có thể tải các tệp tin Glade xml.

+0

Cảm ơn bạn đã nhập :-) Trên thực tế Qt đã cho phép bạn lưu các tệp thiết kế Qt của bạn dưới dạng XML và tải chúng trực tiếp trong một thời gian. Tôi đang đọc trên công cụ Gtk + Model-View-Controller. GtkTreeView vv Cho đến nay tôi nghĩ rằng thiết kế trông tốt hơn so với giải pháp của Qt. Nhưng tôi đã không thực sự sử dụng nó vì vậy tôi có thể sai. Bất kỳ ý kiến ​​về điều đó? Có những lĩnh vực cụ thể trong Qt bạn thấy dễ dàng hơn để làm việc với hơn Gtk? Ví dụ. bố trí, hệ thống khe cắm tín hiệu, tạo widget mới hay đơn giản là thực tế là C++ dễ làm việc hơn C? –

+0

Thú vị, khi tôi đang tìm kiếm nó một thời gian trước đây, tôi đã không tìm thấy bất cứ điều gì .. Tôi thích Qts cơ chế khe tín hiệu, nó rất linh hoạt và dễ sử dụng; Tôi thực sự thích hệ thống đồ họa cho Qt tốt hơn so với GTK equivelents và tôi thấy rằng bộ widget Qt hoàn chỉnh hơn và giàu tính năng (ví dụ như không có phần mở rộng clunky, GTK không hỗ trợ cho các cửa sổ có thể gắn). Tôi làm hầu hết công việc của mình trong C++ bây giờ và tôi thấy nó thuận tiện và dễ dàng (không hoàn toàn dễ dàng như Python, nhưng đủ gần để tôi vui vẻ viết mã Qt trong C++, đặc biệt là vẽ mã, mà không cần lo lắng về mã phức tạp) – Dan

+0

, hấp dẫn. Tôi không nghĩ đến tất cả các API Qt khác, như là graphicsview. Mà thực sự là khá tốt đẹp. Tôi đã xem GtkComboBox và GtkTreeView và trông được thiết kế tốt hơn QComboBox và QTreeView. Dễ dàng đặt các vật dụng vào các cột và xác định mô hình. Những gì bạn có ý nghĩa bởi phần mở rộng clunky? Các API dựa trên GObject khác như Clutter vv? –

0

có C++ gtk + bindings. Google cho gtkmm.

+0

Tôi biết. Tôi không hỏi họ có tồn tại không. Nhưng về chất lượng của chúng –

1

Tôi đã làm việc với cả PyQt và PyGTK và tôi sẽ nói rằng cả hai đều thường xuyên được lưu giữ và đồng bộ với khung công tác mẹ. Tuy nhiên, và điều này là hoàn toàn chủ quan, tôi thấy có phần thưởng xứng đáng hơn với PyGTK hơn là với PyQt, ngay cả khi trước đây tôi chưa viết mã nào bằng GTK. Nếu bạn biết tốt Qt, đi với Qt mặc dù.

2

Tôi nghĩ rằng ràng buộc GTK cũ hơn so với Qt (và do đó trưởng thành hơn một chút) nhưng chúng đều có thể sử dụng được và kiến ​​thức trước đây về Qt của bạn nên là yếu tố chính mà bạn chọn.

Tôi đã phát triển các GUI nhỏ sử dụng cả Qt và GTK với các ràng buộc python của chúng và tìm thấy hai giá trị tương đương. Một số hối tiếc mặc dù trên các ràng buộc PyQt với container Qt (QVector, ...) mà không được dịch thành cấu trúc dữ liệu python thường xuyên và do đó thêm một chút phức tạp cho mã. Tôi đã không nhớ những vấn đề tương tự bằng cách sử dụng PyGTK.

+0

QVariant, và không cần nhiễu khác, nếu bạn sử dụng PyQt với python3 – pihentagy

1

Tôi đã thử một vài kết hợp xung quanh Qt: RubyQt, JRuby + Jambi, PyQt. Đầu tiên nhanh chóng kết thúc trong các lỗi phân đoạn khác nhau. Kỹ năng Qt của tôi có thể là vấn đề nhưng tất cả trong tất cả các lỗi seg không phải là khá dễ đọc.Diễn đàn cho RubyQt gần như đã chết nên tôi không mong đợi tìm thấy nhiều thông tin ở đó.

Vì vậy, tôi đã chuyển đến JRuby + Jambi. Điều này làm việc cho đến khi tốt, tôi đã đạt được một số chức năng còn thiếu ở đây và ở đó. Cộng với tôi đã phải thực hiện một tín hiệu thích hợp/kết nối cho JRuby. Vì vậy, nhiều hơn hoặc ít hơn một hack. Không thuyết phục.

Cuối cùng tôi chuyển sang Python (tôi không thích nhiều lắm). Nhưng woooh, thật là khác biệt. Bindings được cập nhật, tôi vẫn phải gặp phải một lỗi segmetatio, thông báo lỗi là hầu hết thời gian rất giải thích. Vì vậy, như xa như tôi đang quan tâm Python + Qt là một người chiến thắng rõ ràng. Xin lưu ý rằng tôi đã thử các kết hợp này để tìm một ràng buộc ngôn ngữ/qt thích hợp để tôi có thể tạo ra một sản phẩm sẵn sàng với giờ giao hoán của tôi (khoảng 2 giờ một ngày). Vì vậy, sự khoan dung của tôi đối với các vấn đề nhỏ nhưng khó chịu như lỗi phân đoạn là 0. Tôi cũng phải phát triển trên Windows và Linux. Vì vậy, cài đặt Windows là cần thiết (và một lần nữa, Python là một người chiến thắng rõ ràng ở đây).

Các vấn đề liên quan