2010-04-22 15 views
25

Tôi muốn viết một ứng dụng C++ với Qt, nhưng xây dựng một mẫu thử nghiệm đầu tiên bằng cách sử dụng Python và sau đó thay thế dần mã Python bằng C++.Tạo mẫu Qt/C++ bằng Python

Đây có phải là phương pháp phù hợp không và tôi nên sử dụng các công cụ (bindings, binding generator, IDE) nào?
Lý tưởng nhất, mọi thứ nên có sẵn trong kho lưu trữ Ubuntu, vì vậy tôi sẽ không phải lo lắng về các phiên bản không tương thích hoặc cũ và có mọi thứ được thiết lập với một đơn giản aptitude install.
Có tài liệu toàn diện nào về quy trình này hay tôi phải học mọi thành phần, và nếu có, cái nào?

Hiện tại, tôi có nhiều lựa chọn để thực hiện: Qt Creator, vì tính năng tự động hoàn thành tốt đẹp và tích hợp Qt.
Eclipse, vì nó cung cấp hỗ trợ cho cả C++ và Python. Eric (chưa từng sử dụng) Vim

PySide vì nó làm việc với CMake và Boost.Python, về mặt lý thuyết nó sẽ thay thế mã python dễ dàng hơn. PyQt vì nó được sử dụng rộng rãi hơn (hỗ trợ nhiều hơn) và có sẵn dưới dạng gói Debian.

Chỉnh sửa: Vì tôi sẽ phải triển khai chương trình cho các máy tính khác nhau, giải pháp C++ sẽ yêu cầu 1-5 tệp (chương trình và một số tệp thư viện nếu tôi liên kết nó tĩnh), sử dụng Python I ' d phải xây dựng PyQt/PySide/SIP/mọi thứ trên mọi nền tảng và giải thích cách cài đặt Python và mọi thứ khác.

Trả lời

35

Tôi muốn viết một ứng dụng C++ với Qt, nhưng xây dựng một mẫu thử nghiệm đầu tiên bằng Python và sau đó thay thế dần mã Python bằng C++. Đây có phải là cách tiếp cận đúng?

Điều đó tùy thuộc vào mục tiêu của bạn. Sau khi thực hiện cả hai, tôi khuyên bạn nên ở lại với Python bất cứ nơi nào có thể và hợp lý. Mặc dù phải mất một chút kỷ luật, nhưng rất có thể viết các ứng dụng cực lớn trong Python. Nhưng, khi bạn tìm thấy các điểm nóng và những thứ có thể được xử lý tốt hơn trong C++, bạn chắc chắn có thể chuyển các phần liên quan đến C++.

Có tài liệu toàn diện nào về quy trình này hay tôi phải học mọi thành phần, và nếu có, cái nào?

Đây là những gì tôi muốn giới thiệu cho các mảnh khác nhau:

EDITOR/IDE: Sử dụng bất kỳ trình soạn/IDE bạn cảm thấy thoải mái với, nhưng tôi rất muốn khuyên một hỗ trợ sắp xếp. Nếu bạn thấy thoải mái với Eclipse, hãy sử dụng nó. Nếu bạn muốn chủ yếu đi trên tuyến đường C++ và bạn không quá quen thuộc với bất kỳ trình chỉnh sửa nào, bạn có thể nên sử dụng QtCreator tốt hơn. Eric là một IDE Python cực kỳ tốt với sự hỗ trợ cho việc tái cấu trúc, trừ khi bạn định làm rất nhiều C++, hãy xem nó. Thậm chí tốt hơn, mã nguồn của nó là một ví dụ về cách sử dụng và thực hành PyQt tốt.

TRÌNH:

Bản tóm tắt nhanh chóng:

  1. Viết ứng dụng của bạn bằng Python sử dụng PyQt
  2. Khi xác định là điểm nóng, chuyển đổi lớp học Python tách riêng để
  3. C++
  4. Tạo các ràng buộc đối với những các lớp học sử dụng SIP
  5. Nhập libr mới được xác định aries bằng Python ở vị trí của các đối tác của họ Python
  6. Thưởng thức tăng tốc độ

chi tiết chung:

Viết ứng dụng bằng Python sử dụng PyQt. Hãy cẩn thận để giữ một số separation of concerns tốt để khi bạn cần chuyển các phần sang C++, chúng sẽ tách biệt với các phụ thuộc của chúng. Khi bạn cuối cùng cần phải chuyển một cái gì đó để C + +, viết nó trong C + +/Qt và sau đó tạo ra bindings cho nó bằng cách sử dụng SIP. SIP có good reference manual trong quá trình này và bạn có tất cả PyQt làm ví dụ.

TRIỂN KHAI:

C++ - Đối với nhiều ứng dụng phụ thuộc là đủ đơn giản rằng nó không quá khó khăn để tạo ra một trình cài đặt sử dụng một công cụ như NullSoft's Installer hoặc InnoSetup.

Python/PyQt - Ứng dụng PyQt khó cài đặt hơn một chút do phụ thuộc vào Python và sự phụ thuộc vào sự hiện diện của thư viện Qt. Một người ghi lại những nỗ lực của mình trên this post at ARSTechnica. py2exe hoạt động khá tốt trên Windows và hoạt động tốt. IME, freeze.py, đi kèm với nguồn Python, đôi khi gặp sự cố khi xác định thư viện được chia sẻ nào thực sự cần thiết và đôi khi sẽ kết thúc việc tạo nhị phân có phụ thuộc không có. Py2app can be made to work on Mac OS X.

Nhưng tệ hơn, tuy nhiên, là giấy phép PyQt/Qt. Nếu bạn đang phát triển một ứng dụng thương mại, bạn cần có giấy phép PyQt (và Qt) thương mại và đảm bảo ngăn người dùng dễ dàng sửa đổi nguồn hoặc viết mã chống lại PyQt/Qt API because of licensing restrictions. Do đó, tác giả PyQt đã tạo ra một công cụ có tên là VendorId (mặc dù nó có một giấy phép Python). Bên trong VendorId là một công cụ có tên là SIB có thể được sử dụng để tạo ra một tệp thực thi chỉ phụ thuộc vào trình thông dịch Python. Tuy nhiên, nếu bạn định đi xa, bạn có thể muốn cài đặt một Python tùy chỉnh cùng với ứng dụng của bạn.

TUYÊN BỐ TỪ CHỐI: Tôi chưa từng sử dụng PySide chút nào, vì vậy tôi không chắc chắn về cách so sánh với PyQt. Ngoài ra, hãy lưu ý cảnh báo sau trên trang web của họ:

PySide là một công việc đang tiến hành và chưa phù hợp để phát triển ứng dụng đòi hỏi sự ổn định ở mức sản xuất.

Nhưng, trên một lưu ý tốt, họ có ý định, ít nhất là cho bản phát hành ban đầu để "duy trì khả năng tương thích API với PyQt". Vì vậy, ngoài các ràng buộc C++, bạn có thể dễ dàng chuyển đổi giữa hai phần sau.

+0

Câu trả lời hay! Bạn có thể xem xét một phần trên py2exe/freeze.py để đáp ứng với chỉnh sửa của OP, mặc dù họ không đặt câu hỏi một cách rõ ràng. – tgray

+0

@tgray - cảm ơn những người đứng đầu về chỉnh sửa. Tôi đã thêm một phần Triển khai. –

+2

có thể cập nhật 'Pyside không phù hợp với phần sản xuất cấp vì nó đã được một thời gian. – vikki

3

Nếu bạn chỉ học Qt và muốn tận dụng tốc độ tạo mẫu mà Python cung cấp cho bạn, thì tôi khuyên bạn nên tạo một dự án mẫu bằng cách sử dụng PyQt. Như bạn đã nói, có một gói debian, do đó, bạn chỉ đơn giản là apt-get cách thực hiện ứng dụng đầu tiên của mình.

Cá nhân tôi sử dụng gVim làm trình soạn thảo Python/Qt, nhưng bạn thực sự có thể sử dụng bất kỳ trình soạn thảo thân thiện với Python nào mà không gặp nhiều rắc rối. Tôi thích WingIDE và họ đã tự động hoàn thành cho Qt nhưng một khi bạn nhấm nháp từ kim-viện trợ vim thật khó để chuyển đổi.

tôi sẽ nói rằng PySide là 95% + tương thích với PyQt và giấy phép LPGL là tốt đẹp, nhưng nếu bạn chỉ là cố gắng chế tạo thử nghiệm ứng dụng Qt đầu tiên của bạn, sau đó tôi không nghĩ rằng có một lý do thực sự để sử dụng PySide . Mặc dù, tôi thích tài liệu PySide tốt hơn, bạn cũng có thể chỉ sử dụng chúng và thay thế tất cả các tham chiếu thư viện bằng PyQt.

Tùy thuộc vào mức độ phức tạp của ứng dụng mà bạn đang xây dựng, có thể tốt hơn để bắt đầu từ đầu bằng phiên bản C++ hơn là cố gắng thực hiện một phép thuật đen tái cấu trúc SIP. Một khi bạn có một nắm vững về khung công tác Qt, bạn sẽ có thể chuyển đổi giữa các ràng buộc C++ và Python khá dễ dàng.

1

Tôi sẽ vẽ giao diện người dùng giao diện người dùng trước khi bắt đầu tạo mã nguyên mẫu. Dưới đây là một số lợi ích:

  • Quicker hơn mã hóa nguyên mẫu như không có chương trình liên quan đến việc

  • Nhanh chóng điền các widget, chẳng hạn như bảng và cây cối, với dữ liệu

  • Thêm mô tả và thuyết minh của bạn màn hình

  • Dễ dàng tích hợp mô hình vào tài liệu đặc điểm kỹ thuật mà không phải chụp màn hình

  • khái niệm thiết kế Validate UI trước khi thực hiện

Có rất nhiều công cụ có thể giúp bạn làm điều đó, nhưng nếu bạn đang sử dụng Qt, MockupUI có thể là một lựa chọn tốt vì nó làm cho các vật dụng Qt với phong cách bản địa cho Windows 7,8 hoặc 10 làm cho mockup của bạn trông thực tế hơn.