Các góc nguy hiểm của Qt là gì? [đóng cửa]


10

Không có gì hoàn hảo dưới ánh mặt trời. Qt cũng không ngoại lệ và nó cũng có những hạn chế: chúng tôi không thể sử dụng pixmap trong một luồng khác ngoài GUI, chúng tôi không thể sử dụng QImage với định dạng hình ảnh 16 bit trên mỗi kênh, v.v.

Những tình huống nào đã buộc bạn phải làm hỏng thiết kế vì những hạn chế của Qt?
Các quirks ghét nhất là gì?
Những quyết định thiết kế nào nên tránh trong khi sử dụng Qt trong các dự án của mình?


Bạn có thể nói với Qt? Nếu bạn mở rộng nó thành "Q Toolkit", bạn có thể thêm một "the" trước mặt nó, nhưng nó đúng / tốt thực hành để nói những Qt? Chỉ tò mò thôi.
Anto

@Anto: Tôi cho rằng, thebị ràng buộc cornersở đây, không Qt, nhưng đó chỉ là cảm giác trực quan của tôi, vì tôi là người Nga :)
dây leo

Một đường cong nguy hiểm có thể là dự án có thể gặp rắc rối về tài chính. Nokia gần đây đã ký một thỏa thuận với Microsoft (để sử dụng Win7 trên điện thoại của họ) khiến tương lai của Qt bị rung chuyển.
Peter Rowell

Tôi rất thích thú khi biết câu trả lời này bởi vì tôi không phải là người lập trình trực quan cho C ++: D
Shaheer

@Vines: Thế còn "những góc nguy hiểm của QT là gì?"?
Chris

Câu trả lời:


12

Trớ trêu thay, tôi muốn nói rằng sức mạnh của Qt cũng là một trong những nhược điểm. Có rất nhiều cấu trúc và phần mở rộng mạnh mẽ, mã bạn viết trong Qt dễ dàng trở nên cố thủ cao trong "cách Qt". Cố gắng trích xuất chức năng sang ngôn ngữ khác không chỉ có nghĩa là viết lại, bạn cần biết nhiều công nghệ dành riêng cho Qt.

Độ rộng của Qt có nghĩa là tuyển dụng lập trình viên nghĩa là cam kết với người có kinh nghiệm về Qt hoặc đào tạo cho chuyên môn đó. Bắt một nhà thầu trong và lên đến tốc độ khó hơn vanilla C ++.

Khi Qt thay đổi từ 3.x thành 4.x, nhóm của chúng tôi yêu cầu gần 9 tháng để thực hiện cổng, trong thời gian đó, ít chức năng mới được thêm vào. Bạn hy vọng sẽ bù đắp chi phí nâng cấp lớn trong hiệu quả phát triển trong thời gian còn lại. (Lưu ý, tôi đã bỏ qua những lợi thế của Qt, trong đó cũng có rất nhiều)


2
Cổng Qt3 đến Qt4 khó sử dụng với hầu hết mọi người mà tôi biết. QML này và những thứ tương tự đã được giới thiệu trong các phiên bản mới hơn khiến tôi lo lắng, vì nó có thể một lần nữa có một cổng phức tạp sắp tới.
Vitor Py

10

Qt không sử dụng thư viện C ++ tiêu chuẩn , nhưng có QString, QVector, QMap, ...

Điều này có nghĩa là bạn phải đưa ra quyết định thiết kế quan trọng: phần nào của ứng dụng sẽ sử dụng QString và phần nào sẽ sử dụng std :: string?

Sử dụng chuỗi std :: trong một số phần và QString ở các phần khác, có nghĩa là bạn sẽ phải chuyển đổi giữa chuỗi QString và std :: trên các liên kết.

Để tránh chi phí đó, người ta có thể quyết định sử dụng QString trên toàn bộ ứng dụng của bạn. Nhưng điều đó làm cho việc sử dụng các thư viện bên thứ 3 không dựa trên Qt trở nên khó khăn hơn nhiều, ví dụ như boost.

(Lưu ý rằng điều tương tự áp dụng cho std :: map vs QMap, std :: vector vs QVector, v.v.)

Quyết định bộ phận nào sử dụng loại Qt và bộ phận nào sử dụng STL là một quyết định thiết kế chính, với ý nghĩa chính. Và chỉ bởi vì Qt từ chối sử dụng libary C ++ tiêu chuẩn.

IMHO, quyết định đó có thể đi theo bất kỳ cách nào, tùy thuộc vào dự án. Vì vậy, tôi không thể trả lời câu hỏi của bạn mà cần tránh.


1
Tôi đồng ý, nhưng tôi sẽ đi ra ngoài và nói rằng QString (v.v.) cũng là một trong những điểm mạnh vì thật tuyệt khi làm việc với họ.
Johan

1
Ngoài ra, không khó để sử dụng thư viện không sử dụng QString. Có một phương pháp đơn giản để chuyển đổi QString thành chuỗi std :: và ngược lại. Không nhiều lắm

@Glenn Nelson: Vâng, ngày nay có các chức năng chuyển đổi cho QString; rất hữu ích và tiện lợi! Nhưng đặc biệt đối với QVector và QMap sẽ có chi phí chuyển đổi (và các giải pháp đơn giản sẽ không hoạt động đối với QVector <QString>); Chi phí đó nên được xem xét trong quá trình thiết kế để tránh các vấn đề về hiệu suất.
Sjoerd

3

Điều này không trả lời trực tiếp câu hỏi, nhưng tôi nghĩ điều đáng nói: có lẽ khía cạnh 'nguy hiểm' nhất của Qt là Nokia đã lên giường với MSoft ...


2
Nhưng họ đã từ bỏ Qt để làm điều đó.
Martin Beckett

1
Vì lợi ích hoàn toàn - Phần thương mại của Qt hiện thuộc sở hữu của Digia, trong khi Qt đã chuyển sang một hệ thống "quản trị mở" nơi những người khác có thể dễ dàng đóng góp. Ngoài ra còn có nền tảng Qt miễn phí KDE bảo vệ Qt khỏi nguồn đóng.
Vishesh Handa

2

Gần đây tôi phát hiện ra rằng một QChar, mặc dù tên của nó, không thực sự tương ứng với một ký tự mà là một đơn vị mã UTF-16. Do đó, khi bạn muốn quét một ký tự văn bản Unicode tùy ý theo ký tự, bạn phải thêm thuật toán để xử lý các đại diện thay thế cao và thấp, kết hợp các ký tự và tương tự.

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.