2010-06-15 40 views
12

Khi bạn viết một ứng dụng bằng Qt, nó có thể được chạy ngay trong các hệ điều hành khác nhau không? Và (sửa tôi nếu tôi sai) bạn không cần phải có Qt đã được cài đặt trong tất cả các nền tảng khác nhau mà bạn muốn thực hiện ứng dụng của bạn?Qt hoạt động như thế nào (chính xác)?

Chính xác điều này hoạt động như thế nào? Qt có biên dịch đến nền tảng mong muốn hay không, nó có chứa một số "dlls" (libs) hay nó hoạt động như thế nào? Nó khác với việc lập trình một ứng dụng Java, chạy trên nền tảng chéo.

Nếu bạn sử dụng Python để viết một ứng dụng Qt với các ràng buộc Python, người dùng cuối của bạn có cần cài đặt Python không?

+2

Cả hai câu trả lời hiện nay bị bỏ quên để cung cấp liên kết này vì vậy tôi sẽ: http://doc.qt.nokia.com/4.7-snapshot/deployment.html Nó chi tiết làm thế nào để triển khai (và một số biên dịch các cài đặt bạn có thể cần) trên tất cả các nền tảng. Nhưng nó vẫn yêu cầu biên dịch trên mọi nền tảng mà bạn muốn chạy nó. –

+0

Bạn đang bình luận về py2exe, có cái gì đó tương tự tồn tại cho Linux? –

+0

@ David: Tôi có nghĩa là các thư viện (mà cần phải được biên soạn hoặc tải xuống cho mỗi nền tảng), nhưng có bạn là chính xác :) –

Trả lời

12

PyQT [và người anh em nguồn mở PySide] là một liên kết QT đa nền tảng tuyệt vời cho python, nhưng nó không phải là giải pháp ma thuật để vận chuyển ứng dụng của bạn cho tất cả nền tảng mà không thực hiện bất kỳ bảo trì đóng gói/cài đặt nào. Tôi nghĩ có lẽ bạn đang mong đợi một số phép thuật.

QT là thư viện đa nền tảng được viết bằng C++. Điều đó có nghĩa, bạn có thể viết C++ hoặc Python (hoặc ngôn ngữ khác với mã liên kết) một lần, và tạo một "cửa sổ" (một biểu mẫu, một hộp thoại, một cái gì đó trên màn hình) và điền nó với các nút điều khiển (nút và tất cả) và không phải đối phó với sự khác biệt nền tảng về cách các nút được tạo trong Windows, Linux và trên Mac OS X.

Bởi vì nó là một thư viện, nó có thể được đóng gói theo nhiều cách. Nó có thể được "liên kết tĩnh" (được tích hợp vào tệp nhị phân/ứng dụng của bạn) hoặc "liên kết động" (được gọi là DLL trong cửa sổ, thư viện được chia sẻ hoặc trên unix/linux hoặc dưới dạng khung, trong mac os x). Nó không phải luôn luôn "cài đặt" trên máy tính, trừ khi nó là một thư viện được chia sẻ.

Ngay cả khi nó được "cài đặt" vào máy tính, nhiều phiên bản có thể tồn tại trên máy tính đó, và do đó, không phải là một tiện ích mở rộng cho máy tính của bạn. chương trình) trên máy tính của bạn.

Nếu bạn sử dụng các ràng buộc Python cho QT, thì gói cài đặt cho ứng dụng của bạn cần bao gồm các tệp nhị phân của ràng buộc QT (phần mở rộng python), môi trường chạy Python cơ bản bao gồm Python thực thi và thư viện cơ bản, và mã nguồn của chương trình của bạn . Có thể đóng gói hầu hết điều này thành một "bó" duy nhất. Ví dụ, trên Mac OS X, tất cả điều này có thể dễ dàng được đưa vào một gói ".app" và trên Windows và Linux, tôi tin rằng có các công cụ đóng gói và cài đặt có thể giúp bạn thực hiện việc này một cách dễ dàng.

Mặc dù bạn chỉ cần viết mã giao diện người dùng cho ứng dụng của mình một lần, bạn sẽ không có khả năng gửi ứng dụng trên cả ba nền tảng chính cùng một lúc, mà không cần làm ít nhất xây dựng trình cài đặt hoặc bao bì, riêng biệt cho mỗi nền tảng. Người dùng mong muốn tải xuống gói cài đặt/cài đặt cho Windows hoặc Mac OS X và có lẽ đối với Unix/Linux, nó phụ thuộc nhiều hơn vào phân phối bạn cài đặt.

Update thanks to AdamW for this nokia link providing deployment information

+0

Warren, cảm ơn câu trả lời rõ ràng ở nhiều cấp độ như vậy. Tôi đang đặt câu hỏi này bởi vì tôi đang nghĩ đến một ứng dụng Python, và nghĩ về việc đi qua nền tảng, nhưng tôi mới làm quen với lập trình Desktop (tôi phát triển chủ yếu là web). Tôi đến với GTK, Qt và Appcelerator và tôi đã cố gắng để thực sự hiểu được những giải pháp nào sẽ là lý tưởng cho tôi dựa trên những gì họ cung cấp exatcly. –

+0

Python mang lại cho bạn một lợi ích to lớn trong ngôn ngữ (dễ học, và mạnh mẽ) nhưng một khu vực của Python bị phân mảnh là "GUI nào?" câu hỏi. Bạn có lẽ nên xem xét Python Bindings cho WxWidgets là tốt. Một số người nói rằng nếu TkInter (tcl/tk) gui (mà tôi nghĩ là crap) đã không được vận chuyển đầu tiên, WxPython đó sẽ là giao diện mặc định của Python. Nó cũng xử lý Windows, Mac, và Linux, và có một cộng đồng lớn hoạt động. –

+0

@Somebody nếu bạn đang tìm kiếm một tập tin đánh dấu là nền tảng đa ngôn ngữ bất khả tri như HTML/CSS cho QT hãy chắc chắn để kiểm tra QML. –

15

Qt (lý tưởng) cung cấp khả năng tương thích nguồn, không tương thích nhị phân. Bạn vẫn phải biên dịch ứng dụng một cách riêng biệt cho mỗi nền tảng và sử dụng các thư viện Qt động thích hợp (cũng cần phải được biên dịch riêng và có một số mã nền tảng cụ thể).

Đối với câu hỏi cuối cùng của bạn, người dùng sẽ cần Python, thư viện Qt và thư viện liên kết (ví dụ: pyqt), nhưng có nhiều cách khác nhau để nhóm chúng lại.

+0

Vì vậy, mà không bó chúng, tôi sẽ có một (chỉ là một ví dụ) một tập tin 4MB để cài đặt, và đóng gói tất cả mọi thứ một cái gì đó giống như 40MB - giống như gói Java chính nó nếu nó là Java. Tôi có đúng không? –

+1

Không biết về các con số chính xác, nhưng đó là cơ bản đúng. Nếu bạn biết người dùng đã có các thư viện động Qt đúng, bạn không phải bó chúng. –

5

Vấn đề là định nghĩa của bạn về "đã cài đặt". Để Qt hoạt động, tệp thực thi chỉ cần có quyền truy cập vào các thư viện thích hợp.

Tất nhiên, đối với mỗi nền tảng, một tệp thực thi khác nhau và thư viện phải được tạo (xem Qt docs).

Giới thiệu về Python, nếu bạn chạy Python thực thi, bạn phải cài đặt nó (theo cách truyền thống hơn). Trừ khi bạn đang chạy với py2exe trong Windows, ví dụ.

+0

Vì vậy, Qt có xử lý mọi thứ cho tôi đối với các thư viện này, cho mỗi plataform tôi triển khai một ứng dụng? Tôi tạo một cross-plataform một, và muốn triển khai nó trên Linux và Windows, nó bó các libs một cách minh bạch? –

+0

Không, Qt chỉ cung cấp một phương tiện để tạo ra từ cùng một nguồn, các tệp nhị phân khác nhau sẽ chạy trong các nền tảng khác nhau. Bạn vẫn phải cung cấp các tệp nhị phân/trình cài đặt khác nhau cho mỗi nền tảng. Bạn có thể có một trình cài đặt duy nhất để phát hiện nền tảng và cài đặt phiên bản thích hợp, nhưng tôi không thấy bất kỳ lợi ích nào cho phương pháp đó. –

+0

Tệ của tôi, tôi biết nó sẽ tạo ra các tệp nhị phân khác nhau. Tôi chỉ muốn biết nếu Qt tạo ra chúng cho tôi. –

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