Qt Quick so với Qt Widget [đã đóng]


81

Tôi mới làm quen với Qt và không hiểu rõ sự khác biệt giữa Qt Quick Project và Qt Widget Project.

Tôi hy vọng tạo ra một chương trình vẽ một mạng lưới các hình lục giác mà người dùng có thể xoay và cắt, cũng như xoay xung quanh và phóng to và thu nhỏ. Cuối cùng nó sẽ là một bộ điều khiển MIDI. Loại dự án nào sẽ tốt hơn cho điều này, và tại sao?

Tôi hy vọng điều này sẽ hoạt động trên cả nền tảng máy tính để bàn và di động.


3
Dành một chút thời gian trên trang web Qt Quick và xem xét các ví dụ. Nếu đó là những gì bạn cần, hãy sử dụng nó. Nếu không, có cho dự án widget Qt bình thường, nhưng nền tảng di động có thể sẽ là một vấn đề.
Mat

Liên kết được cập nhật để lấy ý kiến của Mat doc.qt.io/qt-5/qtquick-index.html
Ayxan Haqverdili

Câu trả lời:


39

Lưu ý: Các Widget Qt đã được thay thế bằng các Widget QML; câu trả lời này trả lời cho câu hỏi như đã hỏi, hiện tại là một câu hỏi lịch sử về các Widget Qt cũ.

Qt Quick là một giao diện người dùng theo phong cách điện thoại thông minh mang tính khai báo với sự hỗ trợ cho rất nhiều chuyển đổi hoạt ảnh thú vị thường thấy trong các ứng dụng điện thoại thông minh. Quick cũng là một lựa chọn tốt để phát triển nhanh chóng một nguyên mẫu. Qt Widget là mô hình giao diện người dùng hướng đến máy tính để bàn truyền thống.

Ngay bây giờ (trước Qt5), hỗ trợ Qt Quick cho các tính năng hệ thống máy tính để bàn đang thiếu (nhưng đang cải thiện). Không hỗ trợ nhiều cho các menu, thanh công cụ, hộp thoại và các hành vi tiêu chuẩn khác trên màn hình trong Quick, trong khi Widget hỗ trợ rất tốt các yếu tố đó.

Bạn có muốn ứng dụng của mình trông giống và tự nhiên trên nền tảng máy tính để bàn và máy tính bảng hay bạn đang xây dựng một ứng dụng đơn giản xung quanh tiện ích giao diện người dùng tùy chỉnh của riêng mình? Như Mat đã nói, nếu Qt Quick hỗ trợ các tính năng bạn muốn, đó có lẽ sẽ là cách tiếp cận nhanh nhất của bạn. Nếu bạn muốn xây dựng các phiên bản máy tính để bàn đầy đủ tính năng, Qt Widget có lẽ là lựa chọn tốt nhất cho bạn.


1
Tôi muốn cả hai. :) Sử dụng Qt Widget ngay bây giờ.
Anthony

10
Câu trả lời này nên được loại bỏ, chỉnh sửa hoặc phản đối vì chúng ta đang ở trong bài đăng Qt 5.0, chúng ta thậm chí đang tiến đến 6.0 và Qt Widgets đã được thay thế bởi QML Widgets.
Ariel M.

15
QML KHÔNG phải là sự thay thế cho Qt Widgets, ngay cả bây giờ vào năm 2019, ít nhất là cho đến khi nó thay thế các dự án như Qwt, QCustomPlot và nhiều dự án khác dường như không phải vậy. Cho đến khi nó chỉ là một cách thực hiện khác, không hơn không kém.
Andry

1
@Ariel M. Qt Widgets không được thay thế và không thể bị thay thế, ít nhất là cho đến khi mọi thứ được ghi lại, điều này không đúng như vậy.
Andry

1
Qwt và QCustomPlot là các dự án của bên thứ ba và không phải là một phần của QtWidgets nên không liên quan nếu chúng được chuyển hoặc không được chuyển. Hơn nữa, Anthony là một người mới và đang hỏi về việc tạo bộ điều khiển MIDI nơi cần có giao diện người dùng được tùy chỉnh nhiều (xem Arena, Lemur PS Elements và phần mềm tương tự). QML là con đường để đi.
Ariel M.

37

Là một người phát triển ứng dụng qt một cách chuyên nghiệp, tôi sẽ chọn qml thay vì widget bất cứ ngày nào.

Các widget rất tốt cho những thứ rất cơ bản, nhưng tôi một khi bạn cần tạo ra thứ gì đó lạ mắt hơn một chút, các widget sẽ sớm bị thiếu hụt.

Qml đơn giản là linh hoạt hơn, bạn có thể cố định các mục ở bất cứ đâu bạn muốn thay vì sử dụng hệ thống bố cục hạn chế của các widget. Hầu như không có lỗi phụ thuộc vào nền tảng trong khi các widget có đầy đủ những lỗi này. Và hệ thống ràng buộc thuộc tính giúp bạn dễ dàng giữ cho ui đồng bộ với mô hình của mình.


3
Cảm ơn! Tôi vừa quyết định bắt đầu với QML / QtQuick, dựa trên nền tảng chuyên môn của bạn được nêu trong câu trả lời của bạn. Chỉ cần nhận ra rằng tôi có thể dễ dàng sử dụng * .ui.qml từ QtCreator và sử dụng trực tiếp trong PyQt. Đã giải quyết thiết lập ban đầu của tôi về Python + QtQuick!
swdev

2
Sử dụng QtQuick cho các chương trình máy tính để bàn phức tạp là ý tưởng tồi trong hoạt động ...
Yousha Aleayoub

Có thể bạn chưa đủ kinh nghiệm với API bố cục? Bất kỳ ví dụ nào về những gì bạn có thể làm với QML mà bạn không thể làm với Tiện ích? Tôi đang làm việc với Qt trên các ứng dụng có 10K người dùng trên toàn thế giới trong hơn 5 năm và chúng tôi sử dụng Widget vì chỉ chúng mới cung cấp sức mạnh vô hạn. QML tốt cho các nguyên mẫu và các dự án nhỏ. Và vâng, hiệu suất rất quan trọng. Ngoài ra, vì QML được điều khiển bởi OpenGL, đây là một điểm dừng hiển thị nếu cơ sở người dùng của bạn chứa đầy phần cứng cũ.
Dalamber

37

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ó uicá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 .uitệ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 QuickQt 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 TreeViewnhư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 ...)


7

Qt Quick mặc định cho phương ngữ khai báo QML, JSON với ECMAscript nội tuyến được bật. Với các widget Qt, các bảng định kiểu có thể được tạo bởi nhà thiết kế và nhà phát triển thực hiện mã hóa C ++ gốc.

QML được xử lý tại thời điểm chạy. Trong khuôn khổ, mọi thứ có thể chạy cùng nhau, sự khác biệt chỉ tăng thêm tính linh hoạt cho việc ra quyết định của kiến ​​trúc sư phần mềm.


5

Đầu tiên, tôi nghĩ bạn nên bắt đầu với Widget. Giao diện người dùng tiện ích giúp học qt dễ dàng bổ sung nếu các kinh nghiệm trước đây của bạn là về những thứ giao diện người dùng mà bạn sẽ học Nhanh một cách dễ dàng.

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.