Qt vs native при написании фонового приложения - PullRequest
6 голосов
/ 20 апреля 2011

Я собираюсь написать часть программного обеспечения для моего проекта MSc на C ++, и я хочу использовать это как возможность изучить либо собственный API Linux, либо API Qt, оба из которых представляют интерес для меня, но Я не уверен, какой из них будет более подходящим. Извините, если этот вопрос кажется длинным, запутанным и несколько двусмысленным, но я боюсь, что, если я сейчас приму неправильное решение, это может сорвать весь проект.

Приложение, которое я собираюсь создать, имеет очень мало интерфейсов. Это будет и меню конфигурации, пара диалогов с индикаторами выполнения, которые сообщают пользователю, что происходит, и кнопка, которая заставит приложение делать свое дело. Я намерен в конечном итоге развернуть это приложение в Windows, Mac OS и Linux, и эта кнопка будет иметь разное расположение на каждой платформе (панель Gnome в Linux, системный трей в Windows и все, что эта панель вызывается в Mac OS).

Остальная часть будет работать в фоновом режиме, и когда пользователь нажимает кнопку, чтобы начать работу, он будет искать определенные фрагменты информации о приложениях, которые в данный момент работают, компилировать их в файл XML и синхронизировать его с помощью службы, которую я также собираюсь создать и разместить на ней и экземпляр Amazon EC2 под управлением Linux. Когда они входят на другой компьютер, подключенный к этому экземпляру EC2, и нажимают кнопку «Ход приложения», синхронизированные данные будут извлечены и помещены на их компьютер.

Теперь мой вопрос:

Какой будет лучший выбор API здесь: нативный или Qt? Хотя Qt может показаться очевидным выбором для кроссплатформенного приложения, некоторые из моих проблем:

  • Станет ли Qt странным, если я попытаюсь сделать что-то без использования графических элементов управления?
  • Собственный переход (и, таким образом, довольно глубоко в ОС) излишним для чего-то вроде этого?
  • Учитывая, что приложение будет работать в фоновом режиме, и, таким образом, наряду с другими приложениями, Qt и дополнительные уровни абстракции, которые оно принесет с собой, будут отрицательно влиять на производительность остальных пользователей. сессия?
  • Если я использую Qt, насколько трудно будет «вырваться» из оболочки Qt для таких вещей, как размещение кнопки «Ход приложения» в соответствующем месте на каждой платформе.

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

Ответы [ 2 ]

11 голосов
/ 20 апреля 2011

Я голосую за Qt. База кода Qt хорошо разработана для отделения библиотеки "QtCore" от библиотеки "QtGui". «QtCore» включает в себя поддержку процессов / потоков, сигналов / слотов и подобного состояния, которое будет использоваться «независимо» от компонентов графического интерфейса. (Например, виджет "QSlider" является просто компонентом GUI, который представляет состояние, управляемое компонентом actual внутри библиотеки QtCore, что полезно для проверки границ внутри-a-value -range, который может быть красиво применен даже в приложениях без графического интерфейса, таких как системы управления оборудованием.)

Для некоторых проблем сигналы / слоты уникально предоставляют множество вариантов дизайна (гибкость). Это принципиально разрешает связь / сигнализацию между типами и объектами, которые не связаны напрямую (например, когда ни один не включает в себя заголовок другого). Хотя не все конструкции гарантируют это, он является динамичным и мощным для межпроцессного взаимодействия, систем управления оборудованием, гибко масштабируемых модульных систем и приложений с графическим интерфейсом.

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

Qt не в все причудливо, когда вы не используете библиотеку QtGui. (Просто убедитесь, что вы используете «-= QtGui» в вашем qmake, если вы не хотите связывать QtGui.lib, не имеет значения.)

Станет ли Qt странным, если я попытаюсь сделать что-то без использования графического интерфейса виджеты

Нет. Однако у него есть требования к сборке (например, «moc»).

Собственный (и, следовательно, довольно глубокий в ОС) излишек для что-то подобное?

Нет, но в зависимости от вашего языка вам понадобится поддержка потоков, процессов, кодеков и т. Д. Итак, Qt может упростить это (поскольку они не обрабатываются непосредственно языками C / C ++, вам потребуется какая-то библиотека).

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

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

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

Довольно просто - это кроссплатформенное, но вы обладаете огромной гибкостью для привязки к платформе. (например, легко внедрить Qt в MFC-приложение, легко внедрить MFC в приложение Qt, легко смешать QML / Qt-Widgets и т. д.)

2 голосов
/ 20 апреля 2011

Неважно, используете ли вы Qt или собственный Linux для своего пользовательского интерфейса, если вы отделяете свой пользовательский интерфейс от бизнес-логики.

Я бы предложил вам написать свою бизнес-логику в виде отдельного приложения.Насколько это возможно, держите любой платформенный код за пределами этого приложения.Это обеспечивает два преимущества IMO.

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

В ответ на несколько ваших конкретных вопросов:

Станет ли Qt изворотливым, если я попытаюсь что-то сделать без использования виджетов GUI?

Qt всегда будет делать причудливые вещи;)

Собственно (и, таким образом, довольно глубоко в ОС) излишне для чего-то подобного?

Не обязательно.Вам нужно будет сделать некоторые собственные кодировки, чтобы установить кнопку в разных местах каждой платформы.Одна из стратегий построения GUI - это даже не пытаться использовать кроссплатформенный код, такой как Qt, а вместо этого переписать часть GUI вашего приложения в предпочтительной технологии для каждой платформы.Для вас это будет означать C # WPF / Forms в Windows, GTK для Linux (поскольку вы указали Gnome) и Objective C / Cocoa для Mac OSX.

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

Не болеечем любая другая технология графического интерфейса.

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

В Windows это не очень сложно.Я не уверен насчет Gnome или Mac OS X.

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