2009-12-24 32 views
15

Tôi đã phát triển cho các nền tảng Windows và * nix trong một thời gian dài và đang muốn chuyển sang phát triển Mac. Tôi đang ném lên giữa việc sử dụng ObjC/Cocoa và C++/Qt4.5.Qt4.5 so với Cocoa cho giao diện người dùng Mac gốc

Ngữ nghĩa C++/moc có ý nghĩa hơn với tôi, và cải thiện kiến ​​thức trong Qt có vẻ như một điều hợp lý để làm cho bạn kết thúc với một bộ kỹ năng bao gồm nhiều nền tảng hơn.

Tôi có thể đánh cược ứng dụng của mình bằng cách bỏ qua ca cao không?

Ứng dụng mẫu Qt trông khá giống Mac, nhưng chúng khá đơn giản nên không thể kể toàn bộ câu chuyện. Có những ưu điểm khác cho cách Xcode mà Qt không có, chẳng hạn như đóng gói, triển khai, v.v. không?

+0

Rất nhiều người có một con mắt rất nitpicky với những gì một ứng dụng “Mac-native” trông như thế nào, và với chúng tôi, các ứng dụng Qt không cắt nó. "Tôi sử dụng kiểm soát thủy" không dịch sang "Tôi là một công dân tốt trên máy Mac của bạn". –

Trả lời

13

Dưới đây là một cách dễ dàng để trả lời nó:

Nếu bạn đang phát triển một ứng dụng Windows với NET hoặc MFC, bạn sẽ tàn tật các ứng dụng của bạn bằng cách sử dụng Qt? Nếu câu trả lời là có, thì tình huống có thể giống nhau trên máy Mac.

Một vài âm tôi có thể nghĩ ra khỏi đỉnh đầu của tôi:

  • Licensing
  • ứng dụng Qt, thời gian tốt, không hoàn toàn trải nghiệm giao diện người dùng tự nhiên và có điều một nhà thiết kế giao diện người dùng tự nhiên có thể làm trong ca cao làm cho tâm trí rối loạn. Trong khi tôi không thể chắc chắn rằng tất cả các chức năng tương tự không có sẵn trong Qt, tôi nghi ngờ nó.
  • Qt luôn ở phía sau. Nếu Microsoft hoặc Apple đi ra với một công nghệ mới tuyệt vời, bạn phải đợi cho các nhà phát triển Qt cập nhật Qt.

Tuy nhiên, với tất cả điều đó, chỉ bạn mới có thể xác định giá trị kinh doanh của việc sử dụng Qt. Nếu bạn nghĩ rằng phát triển đa nền tảng sẽ là một phần quan trọng trong sự phát triển của bạn, thì Qt có thể đáng giá, mặc dù các vấn đề được đề cập.

+2

Cũng được giải thích, cảm ơn! Tôi nghĩ rằng giấy phép QT là khá tự do vì Nokia đã lấy nó. – Scott

+0

Những ngày này QT được cấp phép theo LGPL 2.1, GPL 3.0 hoặc giấy phép thương mại, vì vậy nó rất linh hoạt. LGPL hoàn toàn tốt cho các ứng dụng thương mại, miễn là bạn tuân theo một vài yêu cầu đơn giản (liên kết động đơn giản hóa nhiều thứ). Xem http://qt.nokia.com/products/licensing để biết chi tiết đầy đủ. – gavinb

+4

Ngoài ra, bạn có thể truy cập API gốc trong Qt và thực hiện các công cụ "bẻ cong tâm trí". Vì vậy, đó là một câu trả lời khá không được trả lời. – anno

1

Tùy thuộc vào loại ứng dụng bạn muốn viết, một ứng cử viên khác là REALbasic.

Việc di chuyển từ C++ khá dễ dàng (tôi có 15 năm kinh nghiệm C++) và khung làm việc và IDE cực kỳ hiệu quả. Bạn có thêm tiền thưởng khi có thể triển khai lên Linux và Windows với nỗ lực tầm thường.

Lý do chính để học Cocoa và mã hóa trong Objective-C là nếu bạn muốn trau dồi kỹ năng iPhone của mình hoặc đang theo đuổi trải nghiệm người dùng thực sự ưa thích. Nếu bạn muốn cạnh tranh với sự phát triển của WPF thì tôi muốn giới thiệu Cocoa.

3

Tôi hiện đang phát triển cả hai với QT (thực sự là PyQT, nhưng nó không tạo sự khác biệt cho câu hỏi của bạn) và ứng dụng Cocoa gốc. Đối với tôi nó không có trí tuệ, tôi đã chọn Cocoa. Nó thực sự có giá trị thời gian để khám phá Cocoa nói chung, có rất nhiều khái niệm tuyệt vời trong khuôn khổ Cocoa, và Objective-C 2.0 là tốt.

+0

Ca cao có vẻ giống như một API mạnh. Thông điệp qua ngữ nghĩa dường như có ý nghĩa đối với giao diện người dùng/gọi lại. – Scott

+0

Nếu bạn muốn khám phá Objective-C sâu hơn, tôi khuyên bạn nên tìm hiểu mục tiêu-C trên máy Mac (http://www.apress.com/book/view/1430218150) và cho Cocoa một cuốn sách kinh điển là ca cao (R) Lập trình cho Mac (R) OS X (http://www.amazon.com/Cocoa-Programming-Mac-OS-3rd/dp/0321503619). –

1

KHÔNG sử dụng Qt cho ứng dụng Mac. Bạn sẽ không nhận được tăng tốc phần cứng để hiển thị 2D và bạn sẽ không thể phân phối tuân thủ ADA.

+0

Không tăng tốc phần cứng? Đó là một mối quan tâm khá lớn. – Scott

+0

Một điều bạn nên ghi nhớ là nếu bạn cần hỗ trợ kỹ thuật, Apple hỗ trợ Cocoa. Apple không hỗ trợ Qt. – NSResponder

+0

Bạn không nhận được tăng tốc OpenGL bình thường cho các yếu tố giao diện người dùng 2D của bạn? – e8johan

3

Tôi muốn sử dụng Qt nếu bạn muốn đây là ứng dụng đa nền tảng.

+1

Việc thực thi Mac OS của các ứng dụng đa nền tảng của tôi rất tệ. Đừng làm thế. Ứng dụng mac tốt được thực hiện bởi các cửa hàng mac. –

2

Tôi làm rất nhiều phát triển đa nền tảng (Mac, Windows, Linux) và đối với một số dự án sử dụng Qt. Nó là một khuôn khổ tốt, và cung cấp một thư viện lớp phong phú.Nếu bạn cần triển khai trên nhiều nền tảng, không thể dành thời gian/công sức cho giao diện người dùng cụ thể cho nền tảng hoặc hỗ trợ "chung" cho mỗi nền tảng là đủ tốt, sau đó sử dụng Qt.

Tuy nhiên, Qt chắc chắn bị một số cách từ hội chứng mẫu số chung thấp nhất, và đôi khi không cảm thấy khá đủ bản địa. Ngoài ra còn có một số tính năng nào đó khó hỗ trợ hoặc đơn giản là không được cung cấp trong các thư viện Qt. Vì vậy, nếu bạn có thể đủ khả năng thời gian và công sức, hoặc ứng dụng của bạn thực sự yêu cầu sự chú ý đến từng chi tiết và phù hợp với kết thúc &, thì việc phát triển các giao diện người dùng riêng biệt có thể đáng giá.

Trong cả hai trường hợp, bạn phải viết mã back-end (aka domain) của mình theo cách trung lập và trung lập của nền tảng. Bằng cách này, giao diện người dùng có thể dễ dàng thay thế hoặc sửa đổi giữa các nền tảng.

Bạn luôn có thể bắt đầu với giao diện người dùng Qt và dành thời gian nhanh chóng tiếp thị, sau đó phát triển giao diện người dùng gốc xuống dòng. Trong thực tế, tôi đã nhận thấy rằng một ứng dụng Qt trên Windows trông hầu hết là "bản địa", trong khi trên Mac có một số dấu hiệu tinh tế nhất định làm cho nó trông/cảm thấy không hoàn toàn đúng. Và người dùng Mac có xu hướng có kỳ vọng cao hơn nhiều khi nói đến UI/UX!

+0

"Bạn luôn có thể bắt đầu với giao diện người dùng Qt và đi một thời gian ngắn để tiếp thị, sau đó phát triển giao diện người dùng gốc xuống dòng." Đây là một ý tưởng cực kỳ tồi tệ. Bạn chỉ có một cơ hội để tạo ấn tượng đầu tiên của mình. – NSResponder

5

Tự hỏi mình: có bao nhiêu ứng dụng Mac tốt nhất mà bạn biết sử dụng Qt thay vì Cocoa gốc?

Đối với hệ thống robot, ban đầu chúng tôi đã viết phần mềm điều khiển bằng C++ bằng thư viện wxWidgets đa nền tảng (chúng tôi tránh Qt do một số mối quan tâm cấp phép), vì chúng tôi cảm thấy chúng tôi phải nhắm mục tiêu nền tảng Windows, Linux và Mac cho người dùng cuối của chúng tôi. Đây là những gì chúng tôi vận chuyển trong hơn một năm cho đến khi tôi bắt đầu mày mò với Cocoa.

Ngay lập tức, điều khiến tôi ấn tượng nhất là bạn có thể phát triển nhanh chóng bằng cách sử dụng Cocoa như thế nào. Cuối cùng, chúng tôi quyết định bỏ hỗ trợ cho Linux và Windows và viết lại toàn bộ các ứng dụng điều khiển của chúng tôi trong Cocoa. Những gì đã đưa chúng ta nhiều năm để đặt lại với nhau trong C + + chỉ cần ba tháng để hoàn toàn reimplement trong Cocoa.

Ngoài vấn đề giao diện "mẫu số chung thấp nhất" mà người khác đã chỉ ra, sự phát triển nhanh chóng được Cocoa cho phép đã trở thành lợi thế cạnh tranh cho công ty chúng tôi. Phần mềm của chúng tôi đã phát triển nhanh hơn rất nhiều kể từ khi chúng tôi chuyển đổi sang Cocoa, và nó đã cho phép chúng tôi là một công ty mới với một nhà phát triển để kéo ngay cả đối thủ cạnh tranh 10 tuổi có đội ngũ phát triển 20 người. Đây dường như là một câu chuyện phổ biến trong không gian phát triển Mac, nơi bạn thấy rất nhiều nhóm nhỏ có thể tạo ra các sản phẩm cạnh tranh với các sản phẩm của các công ty lớn hơn nhiều.

Như lưu ý cuối cùng, việc sử dụng Cocoa mang đến cho bạn khả năng cập nhật các API mới mà Apple liên tục triển khai. Bây giờ chúng tôi đang làm việc trên một giao diện điều khiển mới sẽ sử dụng nhiều Core Animation, một cái gì đó sẽ gây đau đớn để đối phó với việc sử dụng Qt.

+5

Tuy nhiên, tôi nên lưu ý rằng Qt là * cách * mạnh hơn và đầy đủ hơn WxWidgets. Wx là rất hạn chế để xây dựng giao diện đồ họa, trong khi Qt cung cấp một môi trường ứng dụng toàn bộ bao gồm phân tích cú pháp, mạng, âm thanh vv .. Như vậy, Qt là nhiều hơn nữa so sánh với Cocoa hơn Wx. – bastibe

+1

Câu chuyện hay, nhưng tôi không nghĩ thành công của bạn có liên quan nhiều đến việc chuyển sang API Cocoa. Như bastibe chỉ ra đã wxWidgets có chức năng hạn chế. Rất có khả năng Qt sẽ làm công việc tương tự hoặc tốt hơn. Đối với việc thả hỗ trợ Linux và Windows, tôi sẽ gọi nó là một bước lùi. Mac, thật không may, là một thị trường rất nhỏ. Tôi khá chắc chắn rằng thành công của bạn đến từ việc tạo ra một giao diện thân thiện, nhạy bén, thân thiện và bổ sung thêm một số tính năng mới, tất cả những gì bạn có thể làm với Qt và C++. – Ignas2526

3

Bạn có thể xem lớp học QMacCocoaViewContainer. Nó hoạt động như một loại trình bao bọc cho các khung nhìn Cocoa chung, vì vậy bạn cũng có thể có các phần tử Cocoa không được Qt hỗ trợ chính thức.

Tất nhiên điều này có nghĩa là tìm hiểu một chút về Cocoa và Objective C và cách thức giao diện người dùng Cocoa cần phải như thế nào. Nhưng nếu bạn đã biết Qt tốt và nếu nó không giống như ứng dụng của bạn là tất cả và chỉ về GUI này có thể là một cách tốt để đi.

Và đừng quên về số QMacStyle::WidgetSizePolicy hoặc bạn sẽ không hiểu tại sao bảng của bạn trở nên quá lớn.

2

Kể từ khi đăng bài này, tôi đã học cách Cocoa/Objective-C, và đã khá ấn tượng. Mặc dù những gì ban đầu tôi nghĩ là một cú pháp khá kỳ quặc, Objc dường như là một ngôn ngữ rất hiệu quả để triển khai mã UI, và đường XCode - những thứ như Core Data và bindings - tạo ra công việc ngắn cho tất cả các bit nhàm chán.

Tôi đã dành một chút thời gian với các ví dụ và tài liệu QT trước khi đào vào ca cao và có xu hướng đồng ý với những gì đã được nói ở trên phía sau đường cong và ít 'thủy-ish' - mặc dù từ một kiểm tra khá tầm thường. Nếu tôi hoàn toàn phải xây dựng một ứng dụng đa nền tảng, tôi có thể sử dụng QT thay vì cố tách riêng mã UI, vì nó có vẻ như sẽ cung cấp hình ảnh đủ gần, nhưng với mục đích chỉ mac, Cocoa có vẻ như chiến thắng chắc chắn.

Cảm ơn tất cả các câu trả lời của bạn, tất cả đều rất hữu ích!

3

Rõ ràng, tùy chọn tốt nhất là sử dụng bộ nền tảng chéo hỗ trợ các tiện ích gốc. Với QT4 bạn có thể xây dựng giao diện người dùng cơ sở của mình. Sau đó, chỉ cần thêm hỗ trợ gốc cho nền tảng mục tiêu cụ thể của bạn.

Chắc chắn, Cocoa có rất nhiều công cụ ưa thích (và bạn vẫn có thể sử dụng chúng qua QT4), nhưng hãy để tôi được rõ ràng. Tôi thấy rất nhiều ứng dụng ưa thích trên AppStore, những ứng dụng đẹp, nhưng hầu hết các ứng dụng này chỉ là crap, đắt tiền .. những gì bao giờ hết. Tôi thực sự đã bỏ lỡ trình soạn thảo văn bản của Kate, người xem okular của tôi, phần mềm vẽ krita của tôi ... những thứ đó chỉ tốt hơn các lựa chọn thay thế thương mại và đắt tiền và miễn phí. vì vậy tôi chỉ cần tinh chỉnh mã nguồn một chút quá có một bản địa REAL và kinh nghiệm tuyệt vời.

Điều gì sẽ xảy ra nếu tôi phải sử dụng ứng dụng Linux trên máy tính chính của mình là mac os x? hoặc cửa sổ? hay bất cứ cái gì? chỉ có? Ví dụ, tại sao tôi phải mua một phần mềm biên tập hình ảnh đắt tiền, ưa thích nhưng ít nổi bật hơn cho mac của tôi như pixelmator khi tôi có thể sử dụng phần mềm thao tác hình ảnh thực sự đầy đủ tính năng như GIMP? CÓ GIMP là gtk2 dựa trên đó là một nỗi đau trên bất kỳ nền tảng, đặc biệt trên Mac bởi vì thực sự là xấu xí. GIMP nên được chuyển đến QT4. Inkscape nên được chuyển sang QT4, và nó sẽ rất tuyệt vời.

Rất đơn giản để làm .. gosh! http://doc.qt.nokia.com/4.7-snapshot/demos-macmainwindow.html Thậm chí bạn có thể thêm hỗ trợ cho các menu tính năng toàn màn hình sư tử mẹ đẻ mới, tiêu đề thống nhất và thanh công cụ, vv

tôi, như một người sử dụng, tôi thực sự quan tâm về các ứng dụng nền tảng hiệu quả, tính năng, tốt và chéo, i don 't thực sự quan tâm đến sự tiện lợi hoặc lười biếng của nhà phát triển.

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