2010-01-09 12 views

Antwort

8

Ja. Nein, vielleicht. Siehe auch: Java und "einmal schreiben, überall ausführen".

Dateisystem-Layout, externe Dienstprogramme, alles, was Sie mit Dingen wie Dock-Icons, Zeichencodierungsverhalten tun können, diese und mehr sind Bereiche, in denen Sie Probleme haben könnten. Wenn Sie Qt und Python verwenden und alles, was mit Windows-spezifischen Bibliotheken oder Verhaltensweisen verbunden scheint, möglichst vermeiden, wird das Ausführen der Anwendung auf Mac und Linux viel einfacher, aber für jede nicht-triviale Anwendung, wenn jemand das erste Mal versucht es, es wird in ihrem Gesicht explodieren.

Aber durch die sorgfältige Auswahl der Frameworks und Bibliotheken, die Anwendung Cross-Plattform-Arbeit wird mehr wie Bugfixing als traditionelle "Portierung".

2

Ja. Der Code, den Sie mit Qt schreiben, funktioniert unter Windows, Mac, Linux/X11, Embedded Linux, Windows CE und Symbian ohne Änderungen. Sie können eine look here nehmen.

0

Es läuft vielleicht gut, aber es wird einige Tests erfordern, und natürlich behandelt Qt nur die GUI-Portabilität, nicht die unzähligen anderen Dinge, die Portabilitätsprobleme verursachen könnten.

Qt-Apps passen im Allgemeinen nicht sehr gut auf MacOS, da sie standardmäßig keine Applescript-Unterstützung haben und nicht unbedingt die richtigen Tastenkombinationen haben. Aber wenn Sie die Arbeit machen, um diese Probleme zu beheben, funktionieren sie, aber nicht gut. Auf dem Mac ist es viel besser, eine native Benutzeroberfläche zu erstellen. Wenn dies eine Inhouse-App ist, ist Qt wahrscheinlich in Ordnung, aber wenn es zu verkaufen ist, werden Sie nicht viele Verkäufe machen und sich einige Support-Probleme schaffen.

+2

Das ist * absolut * nicht wahr. Qt ist viel mehr als eine plattformübergreifende GUI-Bibliothek und Sie müssen eindeutig mehr darüber recherchieren, bevor Sie Fragen dazu beantworten. Es bietet alles von plattformübergreifenden Dateisystemaufrufen über plattformübergreifende High-Level-Datenstrukturen bis hin zu plattformübergreifenden Netzwerken zu plattformübergreifenden, integrierbaren Browserkomponenten. –

1

Im Allgemeinen - solange Sie keinen Code verwenden, der nicht von Qt-Klassen abgedeckt wird - ja.

Ich habe mehrere Male nur neu kompilierte Anwendungen, die ich in Linux (64bit) unter Windows schrieb, und umgekehrt. Es funktioniert jedes Mal für mich.

Abhängig von Ihren Bedürfnissen, finden Sie möglicherweise auch Compiler-Probleme, aber ich bin sicher, dass Sie wissen, wie man sie umgehen kann. Andere Leute erwähnten einige Probleme, nach denen Sie suchen sollten, lesen Sie einfach die anderen Beiträge in der Frage.

0

Wie die anderen schon sagten, wird alles, was mit Qt-Funktionalität gemacht wird, höchstwahrscheinlich fehlerlos laufen, WENN Sie keine plattformspezifische Funktionalität von qt verwenden.

Es gibt nicht so viel (das meiste hat mit Window-Manager-Zeug zu tun), aber einige Dinge funktionieren möglicherweise nicht auf anderen Systemen. Aber solche Dinge sind sicherlich in der Dokumentation von Qt erwähnt.

Noch gibt es Dinge, die nicht mit Qt getan werden können, also müssen Sie das selbst mit einfachen Python tun ... Ja "Python" selbst ist plattformunabhängig (gut sollte es), aber es gibt viele andere Dinge beteiligt ... na ja, hauptsächlich das Betriebssystem. Und wie das OS reagiert, müssen Sie sich einfach selbst herausfinden, indem Sie die Anwendung auf allen Ziel-Betriebssystemen testen.

Kürzlich habe ich eine recht einfache GUI-Anwendung geschrieben, während sie unter Windows einwandfrei funktionierte, sie lief nicht unter Linux, weil Linux Python auf Unicode anders interpretierte Dateien interpretierte als auf Windows. Außerdem gab ein kleines Skript, das den Hostnamen der Maschine zurückgeben sollte, was es unter Windows gemacht hat, nur "localhost" unter Linux zurück, was offensichtlich nicht das war, was ich wollte.

5

Wie andere Poster erwähnt, besteht das Hauptproblem darin, sicherzustellen, dass Sie nie eine andere non-Qt nicht-plattformübergreifende API berühren. Oder wirklich eine andere nicht-Qt Crossplatform-API, wenn Sie Qt verwenden, müssen Sie sich dazu verpflichten, es ist ein umfassendes Framework und größtenteils mit Qt zu halten ist einfacher als zu etwas anderem gehen. Es gibt einige nette Vorteile, da die grundlegenden Grundelemente in Ihrem Programm auf die gleiche Weise überall funktionieren. (d. h. ein QString in Ihrem Netzwerkcode ist der gleiche wie ein QString in Ihrem Schnittstellencode.) Portabilität: Wenn Sie innerhalb der API bleiben, die Qt Ihnen bereitstellt, sollte es auf mehreren Plattformen funktionieren.

Es wird Bereiche geben, in denen Sie einige Qt-Funktionen aufrufen müssen, die bestimmte plattformübergreifende Optimierungen für einige Plattformen wichtiger als andere sind (z. B. Dock-Symbole) und Sie haben nicht sofort eine ausgefeilte Anwendung auf allen drei Plattformen . Aber im Allgemeinen sollten Sie einer Anwendung sehr nahe bleiben, die alle drei kompiliert und ausführt. (Versuchen Sie qmake oder ein ähnliches Build-System zu verwenden, da der Build-Prozess für Qt-Anwendungen je nach Plattform variiert. Verschiedene Flags usw.)

Es gibt einige seltsame Probleme, die auftreten, wenn Sie Qt mit anderen APIs mischen OpenGL, insbesondere die Art, wie Windows GL-Kontexte sperrt, unterscheidet sich von OS X und Linux. Wenn Sie also OpenGL mit mehreren Threads verwenden wollen, versuchen Sie regelmäßig auf den anderen Plattformen zu kompilieren, um sicherzustellen, dass nichts komplett zerstört wird. Dies wird auch schnell auf Bereiche hinweisen, in denen Sie versehentlich eine nicht plattformübergreifende System-API verwendet haben.

Ich habe Qt mit einem Team verwendet, um ein multi-threaded 3-D-Multiplayer-Netzwerkspiel in Echtzeit zu erstellen (lies: nicht-triviale Anwendung, die viele Bereiche von Qt voll ausnutzte) und wir waren einfach nur umgehauen durch die Fähigkeit von Qt, mehrere Plattformen zu unterstützen. (Wir haben OS X für Windows entwickelt und ich habe regelmäßig dafür gesorgt, dass es auch unter Linux lief.) Wir haben nur einige plattformspezifische Fehler gefunden, die fast ausschließlich auf die Verwendung von Nicht-Qt-APIs wie OpenGL zurückzuführen sind. (Welche sollte man etwas wirklich sagen, dass OpenGL eher einen Kampf war Cross-Plattform zu verwenden, als Qt war.)

Am Ende der Erfahrung, die wir, wie wenig Zeit zufrieden waren wir mit dem Umgang verbringen benötigte plattformspezifische Fehler. Es war überraschend, wie gut wir eine GUI-App für Windows erstellen konnten, da fast niemand vom Team tatsächlich eine primäre Entwicklungsplattform für das Projekt verwendet hat.

Aber testen Sie früh und oft. Ich denke nicht, dass Ihre Methode, eine ganze Anwendung zu schreiben und dann zu testen, eine gute Idee ist. Es ist möglich mit Qt, aber unwahrscheinlich, wenn Sie keine Erfahrung haben, portablen Code zu schreiben und/oder neu in Qt sind.

Verwandte Themen