Lưu ý : Trong câu trả lời này, "Qt Widgets" đề cập đến Ứng dụng Qt Widgets, có thể chọn khi tạo một ứng dụng Qt mới.
Đây là bảy năm sau khi câu hỏi được đăng lần đầu tiên ... nhưng đây là " mục tiêu " hai xu của tôi để vô hiệu hóa bất kỳ sự phát triển nào kể từ đó.
Người làm mới
Ngôn ngữ
Qt Các dự án nhanh sử dụng QML và JavaScript .
Các dự án Qt Widgets sử dụng mã C ++. (PyQt và PySide, các liên kết Python cho Qt, sử dụng Python.)
Hiệu suất và mã hóa
Do đó, Qt Widgets có thể được coi là cấp thấp so với Qt Quick. Nhưng điều này ngụ ý rằng về lâu dài, một dự án Qt Widgets sẽ chạy nhanh hơn và có hiệu suất tốt hơn. Mặc dù vậy, ở cấp thấp có thể tốt, vì Qt Widgets tiếp xúc nhiều hơn với API gốc ( mô-đun QtCore , Qt Style Sheets , v.v.). Điều đó nói rằng, nó thường được sử dụng để phát triển máy tính để bàn.
Qt Quick phục vụ nhiều hơn cho phát triển di động (mặc dù nó vẫn có thể được sử dụng trong phát triển máy tính để bàn). Nó có sẵn sàng để sử dụng các quảng cáo , hình ảnh động , các tab và bố trí, flickables , ngăn kéo , và các điều khiển thông thường; tất cả đều phổ biến trong phát triển di động.
Thiết kế giao diện người dùng
Cả hai đều có ui
các tệp hoạt động với QtDesigner, cung cấp chế độ xem cấp cao để thiết lập bố cục và tạo giao diện. (Trong Qt Quick, các phần mở rộng là .ui.qml
. Trong Qt Widgets, chúng là như vậy .ui
.) Các .ui
tệp không bắt buộc cũng như không cần thiết: bạn có quyền lựa chọn thiết kế và bố trí theo chương trình bằng QML / JS hoặc C ++ / Python.
Học tập
Nếu bạn hoàn toàn mới làm quen với lập trình, tôi khuyên bạn nên xem qua Qt Quick trước. Cá nhân tôi nghĩ Qt Quick có một đường lối học tập nhẹ nhàng hơn và dễ làm việc hơn để hoàn thành vô số dự án. Nó được gọi là "Qt Quick " là có lý do. (Tuy nhiên, đừng coi thường Qt Widgets, chúng có một số mô-đun tốt hơn QtQuick.)
Tuy nhiên, nếu bạn đã được lập trình với C ++ hay Python trước đây, tôi sẽ đề nghị tham gia một cái nhìn tại Qt Widgets đầu tiên, để làm quen với họ tín hiệu và cơ chế khe và mô-đun có thể bạn (ví dụ như quan tâm sql
, network
, gui
) cùng với lập trình thiết kế (ví dụ lập trình mô hình / xem để hiển thị dữ liệu).
Đặc biệt là với C ++, hầu hết các thư viện không phải Qt xử lý sự kiện đều sử dụng while
-loops, điều này không đúng với Qt. Họ sử dụng tín hiệu và khe cắm .
Cuối cùng, ngay cả khi bạn chủ yếu sử dụng Qt Widgets, bạn có thể muốn xem Qt Quick vì nó cung cấp ngôn ngữ khai báo cấp cao để làm việc và cho phép bạn thiết lập mọi thứ nhanh hơn. (Đặc biệt là để phát triển di động.)
Qt cung cấp nhiều ví dụ cho cả dự án Qt Quick và Qt Widget , cùng với một diễn đàn . Bạn không nên lo lắng về việc nhận được sự trợ giúp về lâu dài. (Đừng quên StackOverflow!)
Qt Quick + Qt Widget
Cho đến nay chúng tôi vẫn coi chúng như những thực thể riêng biệt. Nhưng có thể tích hợp QML vào C ++ . Điều này cho phép bạn tận dụng Qt Widget, C ++ và các mô-đun khác. Ví dụ: QtQuick cung cấp một TreeView
nhưng không phải a TreeModel
, có thể / nên được đăng ký vào QML từ C ++. Thường thì có sự phân tách các mối quan tâm , trong đó Qt đề xuất tách các chương trình thành UI và logic thành QML và C ++ tương ứng.
Điều này cũng có ích, nếu nói, bạn cần một phần phụ trợ cho các truy vấn SQL cường độ cao, các thuật toán hoặc các yêu cầu http / xml không đồng bộ. Điều đó không tuyệt phải không? Giao diện người dùng QML / JS cộng với phần phụ trợ C ++. Fullstack Qt'er. :-)
(Những gì tôi chưa thử, là có chương trình phụ trợ Python. Tôi chưa chạm vào PyQt ...)