2009-12-25 22 views
5

Có sử dụng Qt để tăng năng suất trong ứng dụng MFC mà không thực sự sử dụng hệ thống giao diện người dùng Qt không?Tôi có thể sử dụng Qt làm Thư viện C++ mà không sử dụng khung giao diện người dùng của mình

Tôi hiện đang tìm kiếm hoặc một thư viện năng suất tốt cho ứng dụng dựa trên MFC của tôi, với các lớp chứa hữu ích, thuật toán chuỗi, lớp luồng, lớp I/O vv. API Qt rất tốt trong quan điểm của tôi. Tuy nhiên, vì tôi không muốn chuyển giao UI sang Qt (chỉ cần quá nhiều công sức), tôi tự hỏi liệu Qt có thể được sử dụng tốt trong một ứng dụng MFC mà không có bất kỳ giao diện người dùng Qt nào không.

Cảm ơn trước vì ý kiến ​​của bạn.

Fabian

Trả lời

10

Qt được chia thành nhiều mô-đun (QtGui là một trong số chúng). Bạn có thể chọn các mô-đun nào được ứng dụng của bạn sử dụng bằng cách chỉ liên kết với các thư viện bạn cần.

Tôi không thể trả lời xem Qt có thể kết nối với MFC không. Nhưng ít nhất, QString cung cấp chuyển đổi thành std :: string và char */wchar, điều này sẽ giúp bạn khá nhiều.

Tài liệu Qt cung cấp overview qua các mô-đun.

Như daniel chỉ ra bên dưới, bạn phải lưu ý đến vòng lặp sự kiện. Tuy nhiên, có thể sử dụng vòng lặp sự kiện mà không có mô-đun GUI. Bạn có thể gọi processEvents trên QCoreỨng dụng để xử lý tất cả các sự kiện đã xếp hàng và sau đó quay lại. Có một báo trước với việc xóa bỏ trễ, nhưng tài liệu mô tả cách giải quyết.

+0

Điều này không hoàn toàn đúng - bạn sẽ không thể sử dụng mọi lớp trong Qt mà không có vòng lặp sự kiện của nó. Xem câu trả lời @ deus-ex-machina399: http://stackoverflow.com/questions/1962103/can-i-use-qt-as-c-library-without-using-its-ui-framework/1962260#1962260 –

+0

Cảm ơn daniel, tôi kết hợp mối quan tâm của bạn vào câu trả lời của tôi. – Storm

0

Nếu bạn chỉ muốn nó cho các lớp sưu tập tại sao không chỉ sử dụng std :: library?

+1

Vâng, tôi cũng đang xem xét những thứ như luồng. Qt (và Boost) có chức năng hữu ích mà std không cung cấp. – Fabian

+0

Qt là nhiều hơn std :: –

+0

OP ban đầu nói rằng họ muốn Qt để thay thế các lớp học MFC –

2

Mumble project sử dụng Qt cho máy khách và máy chủ, với máy chủ không có bất kỳ mã giao diện người dùng nào, vẫn sử dụng phần còn lại của API Qt.

5

Chắc chắn, bạn có thể sử dụng bộ công cụ QT mà không cần sử dụng thư viện GUI.

Tùy thuộc vào nhu cầu của bạn, bạn có thể muốn xem xét boost thư viện cung cấp bộ API đầy đủ giúp ích cho nhiều thứ. Cá nhân tôi sử dụng nó để làm ổ cắm mạng trong một cách đa nền tảng, nhưng có rất nhiều chi tiết trong đó.

+0

+1 để đề cập đến tăng. –

3

có thể, bạn chỉ cần loại trừ Mô-đun QtGui khỏi dự án của bạn (.pro) vì nó được bao gồm theo mặc định.

QT -= gui 

như mô-đun lõi này chỉ được sử dụng.

7

Có một số lớp tiện ích mà bạn có thể sử dụng nhưng có một cảnh báo rất quan trọng. Qt phụ thuộc rất nhiều vào vòng lặp sự kiện của nó. Vòng lặp sự kiện được bắt đầu bằng cách gọi số QApplication::exec(). Bây giờ nhiều lớp Qt phụ thuộc vào cơ chế tín hiệu và khe là Qt. Tín hiệu và khe cắm hoàn toàn phụ thuộc vào vòng lặp sự kiện để hoạt động chính xác.

Điều này hoàn toàn đúng đối với các mô-đun GUI nhưng cũng đúng với một số mô-đun khác. Người ta có thể mong đợi mọi lớp học có nguồn gốc từ QObject để sử dụng tín hiệu và khe và do đó sẽ không sử dụng được nếu không có vòng lặp sự kiện.

+0

Rất tiếc, rất vui được biết. Về mặt lý thuyết có thể xử lý vòng lặp sự kiện Qt không chặn trong ứng dụng MFC của tôi không? Hoặc điều này sẽ gây ra nhiều vấn đề hơn lợi ích? – Fabian

+1

@Fabian: Nó sẽ rất phức tạp và lộn xộn, và tôi nghĩ rằng các lớp vòng lặp sự kiện chính QApplication và QCoreApplication giả sử chúng đại diện cho toàn bộ trạng thái của chương trình. Những gì bạn nên làm là bỏ lỡ các tín hiệu và khe cắm hoàn toàn, an toàn hơn và lành mạnh hơn. Ngay cả QtNetwork cũng có thể được sử dụng mà không có nó; chỉ sử dụng các cuộc gọi chặn. – blwy10

+0

+1 không có câu trả lời nào khác giải quyết vòng lặp sự kiện - đó là khóa trong Qt. –

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