2009-03-15 30 views
8

Tôi là lập trình viên C#, người đã bắt đầu sử dụng ubuntu khoảng 2 năm trước. Tôi muốn học lập trình GUI trong C hoặc C++. Tôi không thực sự thích mono, nó có xu hướng sụp đổ trên hệ thống của tôi. Tôi có một sự hiểu biết cơ bản về C++. Tôi chưa bao giờ làm việc trong C, nhưng có vẻ rất tuyệt. Tôi nên học/sử dụng bộ công cụ nào? Cho Pro/Cons của mỗi. Cảm ơn!Tôi có nên học GTK + hoặc GTKMM không?

+0

OMG, hãy thử Qt ... –

Trả lời

12

Vì C++ quen thuộc hơn với bạn, bạn có thể thấy GTKmm phù hợp hơn, vì bạn có thể sử dụng thành ngữ như RAII. Thật không may, GTKmm là một chút không đầy đủ và thiếu một vài phần ít được sử dụng của GTK. Tuy nhiên,

GTK + riêng của mình, về cơ bản cho thấy một mô hình đối tượng tương tự như những gì bạn tìm thấy trong C++, nhưng chỉ với các hàm C. Những thứ như xây dựng và tiêu hủy trong C++ được thực hiện một cách rõ ràng trong API C và các cá thể của các tiện ích được xử lý thông qua con trỏ độc quyền.

Hãy thử cả hai và xem cái nào phù hợp với dự án của bạn tốt hơn.

2

Bạn đã xem QT chưa?
Thiết kế C++ đẹp, nền tảng chéo và LGPL

+0

Vâng, tôi rất thích nhưng tôi không (nếu điều đó có ý nghĩa). – Kredns

+7

Tôi biết ý bạn là gì. Ý tôi là không thực sự là –

+0

@Iraimbilanja: Nice One! – Kredns

29

Tôi có thể bị buộc tội vì tôi giúp đóng góp cho gtkmm, nhưng tôi là người dùng đầu tiên, vì vậy ... Trong mọi trường hợp, tôi rất khuyên bạn nên gtkmm nếu bạn cảm thấy thoải mái với C++. Việc quản lý bộ nhớ dễ dàng hơn nhiều với gtkmm so với GTK + vì các đối tượng được tính tham chiếu được quản lý tự động với các con trỏ thông minh. Bạn cũng có thể khởi tạo các đối tượng dưới dạng biến tự động (ví dụ: trên ngăn xếp) và xác định tuổi thọ của chúng theo phạm vi của chúng. Vì vậy, trong thực tế, nó dễ dàng hơn nhiều để tránh rò rỉ bộ nhớ với gtkmm hơn với GTK +.

Một lớn lợi thế của gtkmm trên GTK + (theo ý kiến ​​của tôi) là sử dụng khung an toàn loại an toàn. Trong GTK +, bạn liên tục cần phải vượt qua mọi thứ như con trỏ void và sau đó bỏ chúng xung quanh để loại bạn nghĩ rằng họ nên. Trong gtkmm, bạn không cần phải làm điều này, và có thể tận dụng lợi thế của trình biên dịch thực thi kiểu an toàn trên trình xử lý tín hiệu của bạn.

Một ưu điểm lớn khác trên C/GTK + là dễ dàng tạo ra các lớp mới. Trong GTK +, bạn cần phải viết nhiều mã soạn sẵn và về cơ bản thực hiện lại những thứ mà bạn nhận được miễn phí trong C++ như là một phần của ngôn ngữ (ví dụ: thừa kế, hàm tạo, hàm hủy, v.v.). Điều này là tẻ nhạt và dễ bị lỗi.

greyfade đã đề cập rằng gtkmm chưa hoàn chỉnh và anh ấy ở đúng một mức độ nhất định - gtkmm không bao gồm tất cả mọi thứ trong GTK + API (mặc dù nó bị đóng hoàn toàn). Nhưng trong thực tế, đây không phải là vấn đề bởi vì bạn luôn có thể sử dụng API C/GTK + trực tiếp từ mã gtkmm của mình. Khả năng tương thích C này là một lợi thế rất lớn của C++ trên một cái gì đó như C# hoặc bindings python, nơi bạn sẽ không có lựa chọn thay thế nếu ràng buộc không bao gồm một phần của API.

Lý do thực sự duy nhất để chọn GTK + trên gtkmm (IMO) là gtkmm có thêm một chút chi phí vì nó là trình bao bọc phía trên thư viện C (nhưng đây thường chỉ là một cuộc gọi hàm có tác động không đáng kể), hoặc nếu bạn ghét hoặc không thể sử dụng C++.

+0

+1 for that !!!! –

16

Nếu bạn là lập trình viên C#, tại sao bạn không xem Vala?

Tôi sử dụng pygtk cho hầu hết các ứng dụng GUI của tôi, nhưng Python chỉ đơn giản là quá chậm cho dự án tôi đang làm việc ngay bây giờ, vì vậy tôi đã cố gắng chọn một trong GTK + và GTKmm. Rồi tôi gặp Vala.

Đó là một ngôn ngữ khá mới, và do đó tài liệu là khá hạn chế tại thời điểm này, nhưng tôi nghĩ rằng nó có tốt nhất của cả hai thế giới: C# cú pháp với tốc độ C.

2

Tôi nghĩ rằng cách tốt nhất để đi đầu tiên sẽ được học gtkmm! Sau khi bạn thực hiện xong các điều cơ bản về gtkmm, GTK + sẽ khá đơn giản để tìm hiểu (miễn là bạn biết C và cảm thấy thoải mái với con trỏ).

Trong trường hợp bạn không biết C, bạn có thể tìm hiểu nó một cách nhanh chóng bằng cách đọc C Programming Language bởi Dennis Ritchie

tôi khuyên bạn nên học gtkmm đầu tiên bởi vì nó được thiết kế đặc biệt cho C++, mà là hơi tương tự đến C# vì cả hai đều hướng đối tượng, vì vậy gtkmm sẽ tương đối dễ học trước GTK +.

Sau gtkmm, bạn có thể chuyển sang GTK +

Hầu hết các công ty mã nguồn mở sử dụng GTK + chứ không phải gtkmm, vì vậy GTK + là có lợi ích để tìm hiểu!

+0

Khi dùng plunge để tự học lập trình GUI, 'gtkmm' là thư viện GUI thứ nhất mà tôi đã xem ở nơi mà tôi không ngay lập tức giật mình trong kinh dị bối rối (bao gồm GTK +). Thực tế là tôi đã tự dạy mình C++ 11 vào lúc đó, và 'gtkmm' làm cho một nỗ lực phối hợp để sử dụng một phiên bản ngôn ngữ hiện đại (một lần nữa, không giống như GTK +) đã thêm rất nhiều sự hấp dẫn. Và vâng, như bạn đã nói, một khi tôi đã sử dụng 'gtkmm' để có được một xử lý về cách các mô hình GUI hoạt động - và do sự cần thiết phải báo cáo một vài lỗi nhỏ trong GTK + ;-) - sau này đã vô cùng ý nghĩa hơn khi tôi nhìn nó một lần nữa. Bây giờ, tôi gần như đánh giá cao nó! ;-) –

3

Như nhiều người đã nói, Gtkmm cung cấp cho bạn khả năng quản lý bộ nhớ tốt, đối tượng được tính toán tham chiếu, v.v. Tuy nhiên, nó rơi vào một bộ phận. Tài liệu. Toàn bộ dự án Gtkmm bị các hiện tượng "không có tài liệu", nơi tài liệu được đăng (và đăng lại trên trang web của bên thứ ba) chỉ đơn giản là quét javadoc của các tệp tiêu đề.

Chỉ muốn bạn biết những gì bạn sẽ tham gia. Ví dụ: Scrolled Window là một trong những lớp được tài liệu tốt hơn trong Gtkmm.

+0

Để chính xác, tài liệu cho thư viện 'mm' (' gtkmm', 'glibmm') được viết vào tiêu đề, nhưng nội dung được viết ở đó thường được tạo bằng cách chuyển đổi tài liệu từ các hàm C trong GTK +/GLib/etc. '.c' tập tin tại điểm gói (xây dựng). Tuy nhiên, điều này có thể được ghi đè và các tài liệu tùy chỉnh được viết, ví dụ khi các tài liệu C chứa nhiều C-isms không chuyển đổi tốt. Tất nhiên, nếu bạn thấy bất kỳ thứ gì bị thiếu hoặc bị chuyển đổi nặng, thì các bản vá cho tiêu đề 'mm' hoặc thường trình chuyển đổi từ tài liệu C sẽ được chào đón trên Bugzilla hoặc danh sách gửi thư –

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