2010-01-09 33 views

Trả lời

8

Có. Không chắc. Xem thêm: Java và "viết một lần, chạy bất cứ nơi nào".

Bố cục hệ thống tệp, tiện ích bên ngoài, mọi thứ bạn có thể làm với những thứ như biểu tượng bến tàu, hành vi mã hóa ký tự, những điều này và nhiều hơn nữa là những khu vực bạn có thể gặp phải một số sự cố.

Sử dụng Qt và Python và tránh mọi thứ liên quan đến thư viện hoặc hành vi cụ thể của Windows bất cứ khi nào có thể sẽ chạy ứng dụng trên Mac và Linux dễ dàng hơn nhiều, nhưng đối với bất kỳ ứng dụng không tầm thường nào, lần đầu tiên ai đó cố gắng nó, nó sẽ nổ tung trên khuôn mặt của họ.

Nhưng thông qua lựa chọn cẩn thận về khung công tác và thư viện, làm cho ứng dụng hoạt động trên nhiều nền tảng sẽ giống như sửa lỗi hơn là "chuyển đổi" truyền thống.

2

Có. Mã mà bạn viết bằng Qt sẽ hoạt động trên Windows, Mac, Linux/X11, nhúng Linux, Windows CE và Symbian mà không có bất kỳ thay đổi nào. Bạn có thể lấy số look here.

0

Nó có thể chạy tốt, nhưng nó sẽ mất một số thử nghiệm, và tất nhiên Qt chỉ xử lý tính di động GUI, không phải vô số những thứ khác có thể gây ra vấn đề về tính di động.

Ứng dụng Qt thường không phù hợp với MacOS vì chúng không có hỗ trợ Applescript theo mặc định và không nhất thiết phải có keybindings phù hợp. Nhưng nếu bạn làm công việc để khắc phục những vấn đề đó, chúng hoạt động, nhưng không phải là độc đáo. Trên máy Mac, tốt hơn hết là tạo giao diện người dùng gốc. Nếu đây là một ứng dụng trong nhà, Qt có lẽ là OK, nhưng nếu nó để bán, bạn sẽ không làm cho nhiều doanh số bán hàng và sẽ tạo cho mình một số phức tạp hỗ trợ.

+2

Đây là * hoàn toàn * không đúng sự thật. Qt là nhiều hơn một thư viện GUI đa nền tảng và bạn cần phải nghiên cứu thêm về nó trước khi trả lời các câu hỏi về nó. Nó cung cấp tất cả mọi thứ từ hệ thống tập tin đa nền tảng gọi đến các cấu trúc dữ liệu cấp cao trên nền tảng chéo tới mạng đa nền tảng đến các thành phần trình duyệt nhúng đa nền tảng. –

1

Nói chung - miễn là bạn không sử dụng mã không thuộc phạm vi của các lớp Qt - có.

Tôi có một số thời gian chỉ biên dịch lại các ứng dụng tôi đã viết trong Linux (64bit) trong Windows và cách khác là arround. Nó hoạt động cho tôi mỗi lần.

Phụ thuộc vào nhu cầu của bạn, bạn cũng có thể tìm thấy các sự cố về trình biên dịch, nhưng tôi chắc chắn bạn sẽ biết cách làm việc xung quanh chúng. Những người khác đã đề cập đến một số vấn đề bạn nên tìm kiếm, chỉ cần đọc các bài đăng khác trong câu hỏi.

0

Như những người khác đã nói, mọi thứ được thực hiện bằng cách sử dụng chức năng Qt sẽ rất có khả năng chạy khá hoàn hảo, KHI bạn không sử dụng chức năng nền tảng cụ thể của qt.

Không có nhiều điều đó (hầu hết nó phải làm với công cụ quản lý cửa sổ), nhưng một số thứ có thể không hoạt động trên các hệ thống khác. Nhưng những điều như vậy chắc chắn là mentiond trong tài liệu của Qt.

Vẫn có những thứ không thể thực hiện bằng Qt, vì vậy bạn sẽ phải tự làm điều đó bằng cách sử dụng Python đơn giản ... Vâng "Python" chính nó là nền tảng độc lập (tốt nên), nhưng có rất nhiều những thứ khác liên quan ... chủ yếu là hệ điều hành. Và cách hệ điều hành phản ứng, bạn sẽ phải tự tìm ra bằng cách kiểm tra ứng dụng trên tất cả hệ điều hành đích. Gần đây tôi đã viết một ứng dụng GUI khá đơn giản, trong khi nó chạy hoàn hảo trên Windows, nó không chạy trên Linux, bởi vì trên Linux Python giải thích các tập tin được mã hóa trong unicode khác với trên Windows. Ngoài ra một kịch bản nhỏ mà nên trả về tên máy của máy, mà nó đã làm trên Windows, chỉ trả về "localhost" trên Linux, mà rõ ràng không phải là những gì tôi muốn.

5

Như các áp phích khác được đề cập, vấn đề chính là đảm bảo bạn không bao giờ chạm vào một API không đa nền tảng phi Qt khác. Hoặc thậm chí là một API đa nền tảng không Qt khác, nếu bạn sử dụng Qt bạn cần phải cam kết với nó, đó là một khuôn khổ toàn diện và phần lớn gắn bó với Qt thì dễ hơn là đi đến bất kỳ thứ gì khác. Có một số lợi thế tốt đẹp như các nguyên thủy cơ bản trong chương trình của bạn sẽ làm việc theo cùng một cách trên tất cả các nơi. (tức là một QString trong mã mạng của bạn sẽ giống như một QString trong mã giao diện của bạn.) Tính linh hoạt, nếu bạn ở trong API Qt cung cấp cho bạn, nó sẽ hoạt động trên nhiều nền tảng. Sẽ có những khu vực mà bạn có thể cần phải gọi một số chức năng Qt cung cấp các chỉnh sửa nền tảng cụ thể quan trọng đối với một số nền tảng so với các nền tảng khác (ví dụ như biểu tượng dock) và bạn sẽ không ngay lập tức có ứng dụng được đánh bóng trên cả ba nền tảng . Nhưng nói chung, bạn nên ở rất gần với một ứng dụng biên dịch và chạy trên cả ba ứng dụng. (Hãy thử sử dụng qmake hoặc một hệ thống xây dựng tương tự, vì quá trình xây dựng cho các ứng dụng Qt thay đổi tùy theo nền tảng. Các cờ khác nhau, v.v.)

Có một số vấn đề kỳ lạ xuất hiện khi bạn kết hợp Qt với các API khác như OpenGL, đặc biệt là cách cửa sổ khóa GL bối cảnh khác với cách OS X và Linux không, vì vậy nếu bạn định sử dụng OpenGL với nhiều chủ đề, hãy cố gắng biên dịch định kỳ trên các nền tảng khác để đảm bảo không có gì hoàn toàn bị vỡ. Điều này cũng sẽ nhanh chóng chỉ ra các khu vực nơi bạn có thể vô tình sử dụng API hệ thống không đa nền tảng.

Tôi đã sử dụng Qt với một nhóm để xây dựng trò chơi mạng nhiều người chơi nhiều thời gian 3-d đa luồng (đọc: ứng dụng không tầm thường sử dụng nhiều khu vực Qt) và chúng tôi không có gì ngoài việc thổi bay bởi tính hiệu quả của khả năng hỗ trợ nhiều nền tảng của Qt. (Chúng tôi phát triển trên OS X trong khi nhắm mục tiêu Windows và tôi thường xuyên đảm bảo rằng nó vẫn chạy trên Linux.) Chúng tôi chỉ gặp một vài lỗi cụ thể trên nền tảng, hầu như tất cả đều phát sinh từ việc sử dụng các API không phải Qt như OpenGL. (Mà thực sự nên nói với bạn điều gì đó, rằng OpenGL đã được nhiều hơn một cuộc đấu tranh để sử dụng nền tảng chéo hơn Qt được.)

Vào cuối của kinh nghiệm, chúng tôi đã hài lòng với thời gian ít nhất chúng ta cần phải chi tiêu đối phó với nền tảng cụ thể lỗi. Thật đáng ngạc nhiên khi chúng tôi có thể tạo ra một ứng dụng GUI cho các cửa sổ cho hầu như không ai trong nhóm thực sự sử dụng nó như một nền tảng phát triển chính thông qua dự án.

Nhưng hãy kiểm tra sớm và thường xuyên. Tôi không nghĩ rằng cách tiếp cận của bạn viết một ứng dụng toàn bộ và sau đó thử nghiệm là một ý tưởng tốt. Có thể với Qt, nhưng không chắc nếu bạn không có kinh nghiệm viết mã di động và/hoặc là mới đối với Qt.

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