Bạn nên tìm kiếm gì khi chọn thư viện GUI C ++ đa nền tảng?


8

Là một lập trình viên C ++ đang học, tôi đang cố gắng chọn một khung GUI hoặc thư viện cho các dự án của riêng tôi.

Tôi có một số kinh nghiệm với Qt: nó rất đơn giản, nó có một tài liệu rất tốt và cung cấp rất nhiều công cụ, nhưng dường như nó nhân đôi rất nhiều thư viện chuẩn.

Có phải tất cả các thư viện GUI C ++ như thế này? Tôi nên tìm kiếm gì trong thư viện GUI? Làm thế nào để tôi xác định cái nào sẽ được đưa ra tốt nhất cho một vấn đề cụ thể? Tôi có nên tập trung vào một thư viện cụ thể không, hay có đáng để biết một vài trong số chúng vì chúng có thể phục vụ các mục đích khác nhau không?


Ngoài ra, để tham khảo: stackoverflow.com/questions/4172398/ trên
Vitor Py

Câu trả lời:


6

Qt: nó rất đơn giản,

Không phải cái gì đó thường đúng với gui libs, nhưng cơ chế tín hiệu / khe cắm của Qt là một giải pháp khá tốt

nó có một tài liệu rất tốt

Qt và WX đều cung cấp tài liệu khá tốt, cả tài liệu tham khảo và hướng dẫn

và cung cấp rất nhiều công cụ,

Qt cần các công cụ, các lib khác không yêu cầu bất cứ thứ gì ngoài trình biên dịch thông thường - đặc biệt là các trình sử dụng bố cục kiểu sizer thậm chí không cần trình soạn thảo gui.

nhưng nó dường như trùng lặp rất nhiều thư viện tiêu chuẩn.

Điều này là phổ biến đơn giản vì chỉ một vài năm trước bạn không thể dựa vào std lib và STL có mặt hoặc hoạt động trên tất cả các nền tảng. Ngay cả ngày nay điều này luôn đúng trên các nền tảng di động. Thông thường mặc dù bạn KHÔNG phải sử dụng các lớp bộ sưu tập của họ, hoặc bạn thấy chúng được cắm tương thích với các lớp stl

Làm thế nào để tôi xác định cái nào sẽ được đưa ra một vấn đề cụ thể nhất? "

Nói chung, bạn cần một gui lib để thực hiện các vấn đề về loại ứng dụng lớn dành cho máy tính để bàn hoặc giao diện web / thiết bị di động có cấu hình cao. Thông thường gui lib có hương vị cho cả hai, chẳng hạn như Qt và QWT


Sao chép thư viện chuẩn xảy ra rất nhiều - bao gồm cả wxWidgets, mặc dù IIRC có các tùy chọn để chuyển sang sử dụng thư viện chuẩn ngay bây giờ. Microsoft đã không nghiêm túc về tiêu chuẩn cho đến khi có lẽ là phiên bản Visual Studio năm 2003, trong số các vấn đề khác.
Steve314

Đừng nghĩ rằng nó đã hoàn toàn chính xác cho đến khi VS2008! Đã vài năm kể từ khi tôi sử dụng wx nhưng trên Qt, các lớp sưu tập giờ đây hoàn toàn có thể chuyển đổi cho stl. Cả hai vẫn sử dụng lớp chuỗi riêng của họ - nhưng cho biết std :: chuỗi nghèo đến mức nào bạn có thể tha thứ cho điều đó!
Martin Beckett

Tôi nghi ngờ nó hoàn toàn chính xác ngay cả bây giờ - sự hoàn hảo là một chút để yêu cầu. VC ++ 2003 dường như rất ổn với tôi, mặc dù với một số người khó chịu. Có lẽ đó là một thứ (mọi thứ tốt hơn so với Visual C ++ 6).
Steve314

@ Steve314 - nó đã tốt hơn rất nhiều trong vc2008 và bây giờ là vc2010. Có vẻ như bằng cách thuê nhóm C ++ của msft đã chuyển từ "nó hoạt động cho chúng tôi" và "thêm một tính năng vào ngôn ngữ để sửa ứng dụng này" để cố gắng trở thành trình biên dịch C ++ tốt nhất.
Martin Beckett

4

Có phải tất cả các thư viện GUI C ++ như thế này?

Đừng cố gắng bọc mọi thứ vào một mô tả. Sẽ luôn có những thư viện kém hoặc thậm chí không có giấy tờ. Họ có thể phát minh lại bánh xe 90% thời gian hoặc cung cấp một số chức năng đột phá mới.

Tôi nên tìm kiếm gì trong thư viện GUI?

Bạn nên tìm một thư viện giải quyết nhu cầu của bạn theo cách hiệu quả nhất có thể. Theo hiệu quả, tôi có nghĩa là sự kết hợp giữa mã khôn ngoan và hiệu suất. Rõ ràng nếu thư viện trông gợi nhớ đến Perl bị xáo trộn, bạn sẽ không muốn sử dụng nó cho mã sản xuất ngay cả khi nó cung cấp thực thi cực kỳ nhanh. Ngược lại, bạn không muốn một cái gì đó cực kỳ dài dòng nhưng với tốc độ thực thi bị cản trở.

Làm thế nào để tôi xác định cái nào sẽ được đưa ra tốt nhất cho một vấn đề cụ thể?

Luôn luôn không có một cách dứt khoát để xác định X tốt nhất để làm Y là gì . Nếu bạn có thể tìm thấy một số loại dữ liệu không thiên vị liên quan đến vấn đề của bạn và các giải pháp được cung cấp bởi các thư viện là một cách. Kiến thức và kinh nghiệm cũng là một trong những cách tốt nhất để xác định cách giải pháp sẽ phù hợp với nhu cầu của bạn.

Tôi có nên tập trung vào một thư viện cụ thể không, hay có đáng để biết một vài trong số chúng vì chúng có thể phục vụ các mục đích khác nhau không?

Điều đó chỉ phụ thuộc vào những gì bạn làm và nhu cầu của bạn là gì. Nếu bạn cần làm việc trên X thì bạn sẽ cần học thư viện tốt nhất cho nó. Nếu bạn chỉ làm việc trên một thứ và bạn có một thư viện phù hợp với nhu cầu của mình, tại sao phải bận tâm? *

* Lưu ý: Không bao giờ thực sự đau đớn khi biết thêm, tôi chỉ nói từ quan điểm hoàn toàn "Hoàn thành công việc".


+1 "hoàn thành công việc". Bạn có thể dành cả đời để nghiên cứu lib lib tốt nhất có thể cho dự án cụ thể của mình và cuối cùng, bạn có thể chỉ chọn một thứ tốt hơn một chút (nếu có) so với bạn sẽ chọn từ một bài kiểm tra khá hời hợt trong số ít phổ biến nhất. Cá nhân, tôi biết đủ wxWidgets mà tôi không muốn bận tâm nghiên cứu bất cứ điều gì khác miễn là tôi có thể kiểm soát GUI nào tôi đang sử dụng - QT hoặc GTK có thể được xử lý theo cách tương tự, giả sử sử dụng chúng trong Windows không phải là lớn thỏa thuận. Nếu có bất cứ điều gì, tôi tò mò về thư viện FLTK nhẹ.
Steve314

2

Làm thế nào để tôi xác định cái nào sẽ được đưa ra tốt nhất cho một vấn đề cụ thể?

Đã thực hiện hàng chục cổng GUI và ứng dụng GUI đa nền tảng kể từ năm 1989, tôi đã tìm thấy câu hỏi đầu tiên bạn phải luôn quyết định là giao diện . Các thư viện GUI đa nền tảng chạy dọc theo một quang phổ theo cách đó.

Nhìn và cảm nhận tương tự ở mọi nơi

Chúng hoạt động tốt nhất nếu phần mềm của bạn nhắm vào những người phải thay đổi nền tảng thường xuyên và muốn phần mềm của họ hoạt động giống hệt nhau ở mọi nơi. Điều này là phổ biến trong một số ứng dụng khoa học, nơi bạn có thể là một người Linux đến thăm phòng thí nghiệm Mac hoặc ai đó cung cấp cho bạn một tấn Windows boxen như một phần của khoản trợ cấp.

Ví dụ về các thư viện như vậy sẽ là Tk và GTK +.

Nền tảng giao diện bản địa ở mọi nơi

Những thứ này tốt hơn nhiều cho các ứng dụng thương mại và người dùng không có kỹ thuật, bởi vì những người đó quan tâm nhiều hơn đến giao diện người dùng quen thuộc. Trên thực tế, họ có khả năng từ chối sử dụng phần mềm không có giao diện tự nhiên.

Ví dụ về các thư viện như vậy sẽ là wxWidgets, RealBasic, Cocotron và Qt.


Khi bạn đưa ra quyết định đó, sau đó bạn có thể bắt đầu xem xét miền vấn đề của mình chi tiết hơn và xác định bộ công cụ cụ thể nào sẽ phù hợp nhất.


Không thể thiết lập giao diện một lần và mãi mãi với wxWidgets hoặc Qt?
BenjaminB

Hồi ức của tôi là wxWidgets là một trình bao bọc xung quanh hệ thống UI gốc của nền tảng, vì vậy tôi không nghĩ vậy. Tôi không chắc chắn về Qt. Chúng được sử dụng để mô phỏng giao diện của widget gốc, vì vậy bạn có thể chuyển nó sang mô phỏng một nền tảng khác. Nhưng tôi không chắc bây giờ họ đang làm gì. Dù sao, kinh nghiệm của tôi chủ yếu là phát triển để sử dụng cho mục đích thương mại bởi các khách hàng không có kỹ thuật, trong đó một cái nhìn và cảm nhận không phải là bản địa là một điều xấu. Ví dụ, bất cứ khi nào tôi kích hoạt git gui dựa trên Tk, tôi thấy nó hơi bị chói tai bởi vì dù tôi đang dùng nền tảng nào, nó đều có vẻ sai.
Bob Murphy

Cả wx và qt đều sử dụng các widget gốc hoặc vẽ các widget tìm kiếm gốc nếu chúng không tồn tại, cả hai đều hỗ trợ các chủ đề trông rất tự nhiên.
Martin Beckett

2

Bên dưới các khía cạnh kỹ thuật, bạn nên có một cái nhìn cận cảnh về việc cấp phép. Qt chỉ miễn phí cho phát triển nguồn mở phi thương mại. Nếu bạn bắt đầu sử dụng nó trong các lĩnh vực khác như hợp đồng làm việc, bạn phải đảm bảo rằng bạn và khách hàng hoặc công ty của bạn có thể sử dụng nó và chi phí có thể chấp nhận được cho tất cả các bên liên quan.

chỉnh sửa: Như Raphael nói tôi sai về giấy phép của Qt. Tuy nhiên, tôi nghĩ rằng đây là một phần quan trọng của quy trình quyết định đối với thư viện GUI mà ai đó có thể muốn sử dụng, để đảm bảo rằng anh ta có thể thực hiện việc này một cách hợp pháp.


Giấy phép đã thay đổi. Miễn là bạn không sửa đổi nguồn của Qt, bạn có thể sử dụng nó miễn phí ngay cả trên các ứng dụng thương mại, nguồn đóng.
Raphael

1

Bên cạnh hình thức kỹ thuật của sự lựa chọn, một điểm khác là sự sẵn có của các nhà phát triển có kiến ​​thức về công cụ được chọn, cho vòng đời của sản phẩm. Đây phải là một động lực chính trong việc lựa chọn tất cả các công cụ phát triển trong thế giới thương mại. Nếu đó chỉ là dành cho bạn, thì hãy làm những gì bạn muốn, tuy nhiên nếu không, hãy gắn bó với (các) công cụ mà các nhà phát triển biết, muốn biết và là những công cụ nổi tiếng. Việc tuyển dụng một nhà thầu hoặc nhân viên cho ứng dụng Java / Swing hoặc C ++ / QT dễ dàng hơn nhiều so với ứng dụng ADA / (điền vào bộ công cụ GUI chưa từng thấy của bạn ở đây).

Là bộ công cụ bạn chọn "thăng tiến nghề nghiệp" cho bạn và mọi người khác, hay nó sẽ là một trách nhiệm trong hồ sơ xin việc?


Tôi không chịu trách nhiệm cho bất cứ điều gì ngoài bản thân mình. Vì vậy, nó chỉ dành cho các dự án cá nhân và sơ yếu lý lịch của tôi!
BenjaminB
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.