Если я использую QT For Windows, будет ли мое приложение отлично работать на Linux / Mac / Windows? - PullRequest
5 голосов
/ 10 января 2010

У меня сложилось впечатление, что Python работает в Triforce без сбоев. Программа, которая работает в Windows, будет работать в Linux. Это чувство правильно?

Сказав, что если я создам свое приложение в QT For Windows, будет ли оно безупречно работать и в Linux / Mac?

Спасибо.

Ответы [ 6 ]

8 голосов
/ 10 января 2010

Да. Может быть См. Также: Java и «пиши один раз, беги куда угодно».

Компоновка файловой системы, внешние утилиты, все, что вы можете сделать с такими вещами, как значки док-станции, поведение при кодировании символов, и эти и многие другие области, с которыми вы можете столкнуться.

Использование Qt и Python и упорный отказ от всего, что, по-видимому, связано с библиотеками или поведениями, специфичными для Windows, значительно упростят запуск приложения на Mac и Linux, но для любого нетривиального приложения он впервые попробует , взорвется в их лицо.

Но благодаря тщательному выбору фреймворков и библиотек работа кроссплатформенного приложения будет во многом похожа на исправление ошибок, а не на традиционное «портирование».

5 голосов
/ 11 января 2010

Как уже упоминалось другими авторами, ключевая проблема заключается в том, чтобы вы никогда не прикасались к другому не-кроссплатформенному API без Qt. Или даже другой кроссплатформенный API, не относящийся к Qt, если вы используете Qt, то вам, видимо, нужно это сделать, это всеобъемлющая структура, и по большей части придерживаться Qt проще, чем переходить к чему-либо другому. Есть некоторые приятные преимущества, так как основные примитивы в вашей программе будут работать одинаково повсюду. (То есть QString в вашем сетевом коде будет таким же, как QString в вашем коде интерфейса.) В отношении переносимости, если вы остаетесь внутри API, предоставляемого Qt, он должен работать на нескольких платформах.

В некоторых областях вам может понадобиться вызвать некоторые функции Qt, которые предоставляют определенные кроссплатформенные настройки, более важные для некоторых платформ, чем другие (например, значки док-станции), и у вас сразу не будет готового приложения на всех трех платформах. Но в целом вы должны оставаться очень близко к приложению, которое компилируется и работает на всех трех. (Попробуйте использовать qmake или аналогичную систему сборки, поскольку процесс сборки приложений Qt зависит от платформы. Различные флаги и т. Д.)

Есть некоторые странные проблемы, которые возникают, когда вы смешиваете Qt с другими API, такими как OpenGL, в частности, то, как Windows блокирует контексты GL, отличается от того, как это делают OS X и Linux, поэтому, если вы намереваетесь использовать OpenGL с несколькими потоками, попробуйте периодически компилировать на других платформах, чтобы убедиться, что ничего не сломано. Это также быстро укажет на области, где вы могли непреднамеренно использовать API не кроссплатформенной системы.

Я использовал Qt вместе с командой для создания многопоточной трехмерной многопользовательской сетевой игры в реальном времени (читай: нетривиальное приложение, полностью использующее многие области Qt), и мы были просто поражены эффективность способности Qt поддерживать несколько платформ. (Мы разрабатывали для OS X, ориентируясь на Windows, и я регулярно следил за тем, чтобы он по-прежнему работал и на Linux.) Мы обнаружили только несколько специфичных для платформы ошибок, почти все из которых возникли из-за использования не-Qt API, таких как OpenGL. (Что действительно должно вам кое-что сказать, что OpenGL больше боролся за использование кроссплатформенности, чем Qt.)

В конце опыта мы были довольны тем, как мало времени нам нужно было потратить на устранение ошибок, связанных с платформой. Было удивительно, насколько хорошо мы могли сделать приложение с графическим интерфейсом для окон, учитывая, что практически никто из команды не использовал его в качестве основной платформы разработки в рамках проекта.

Но проверяйте рано и часто. Я не думаю, что ваш подход - написать целое приложение, а затем протестировать - хорошая идея. Это возможно с Qt, но маловероятно, если у вас нет опыта написания переносимого кода и / или вы новичок в Qt.

2 голосов
/ 10 января 2010

Да. Код, который вы пишете с использованием Qt, будет работать без изменений в Windows, Mac, Linux / X11, встроенном Linux, Windows CE и Symbian. Вы можете посмотреть здесь .

1 голос
/ 10 января 2010

Обычно - если вы не используете код, который не охватывается классами Qt - да.

Я уже несколько раз перекомпилировал приложения, которые я написал в Linux (64bit) под Windows, и наоборот. У меня это работает каждый раз.

Зависит от ваших потребностей, вы также можете обнаружить проблемы с компилятором, но я уверен, что вы знаете, как их обойти. Другие люди упомянули некоторые проблемы, которые вы должны искать, просто прочитайте другие посты в вопросе.

0 голосов
/ 10 января 2010

Как говорили другие, все, что делается с использованием Qt-Functionality, скорее всего, будет работать без нареканий, КОГДА вы не используете платформенную функциональность qt.

Не так уж много (в основном это связано с менеджером окон), но некоторые вещи могут не работать в других системах. Но такие вещи обязательно упоминаются в документации Qt.

Тем не менее, есть вещи, которые нельзя сделать с помощью Qt, так что вам придется делать это самостоятельно, используя простой Python ... Да, «Python» сам по себе не зависит от платформы (ну, так и должно быть), но здесь задействовано много других вещей ... ну, в основном, ОС. И как реагирует ОС, вам просто необходимо выяснить себя, протестировав приложение на всех целевых ОС.

Недавно я написал довольно простое GUI-приложение, хотя оно работало безупречно в Windows, оно не работало в Linux, потому что в Linux Python интерпретировал файлы, закодированные в Unicode иначе, чем в Windows. Кроме того, небольшой скрипт, который должен возвращать имя хоста машины, что он делал в Windows, возвращал только «localhost» в Linux, что, очевидно, было не тем, что я хотел.

0 голосов
/ 10 января 2010

Он может работать хорошо, но он потребует некоторого тестирования, и, конечно, Qt обрабатывает только переносимость графического интерфейса, а не множество других вещей, которые могут вызвать проблемы с переносимостью.

Приложения Qt обычно не очень хорошо вписываются в MacOS, потому что они не поддерживают Applescript по умолчанию и не обязательно имеют правильные сочетания клавиш. Но если вы делаете работу, чтобы исправить эти проблемы, они работают, но не очень хорошо. На Mac гораздо лучше создать собственный интерфейс. Если это собственное приложение, Qt, вероятно, в порядке, но если оно продается, вы не будете делать много продаж и создадите себе проблемы с поддержкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...