2009-02-25 2 views
19

Я пишу довольно большую и сложную программу анализа данных, и я дошел до того момента, когда я думаю, что пришло время создать графический интерфейс для программы. Поэтому мой вопрос:Gui toolkits, который я должен использовать?

Какой инструментарий GUI использовать?

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

Он должен позволить мне рисовать непосредственно на экране, чтобы я мог поместить графики (спектры на самом деле), сюжеты и многое другое, чтобы они могли видеть. Мне нужно иметь возможность собирать информацию о местоположении, где они нажимали на вышеупомянутые спектры. Мне нужно иметь возможность отображать текст и вводить текстовый ввод от пользователя. Он должен иметь возможность создавать меню (вы знаете «Файл», «Редактировать» и т. Д.). Если бы у него был встроенный виджет для генерации таблиц, который был бы удобен (хотя я могу преодолеть недостаток этого, если я могу рисовать непосредственно на экране). Он должен иметь возможность всплывать предупреждения, диалоговые окна, сохранять и открывать коробки и т. Д. Это почти все, большинство из них кажутся довольно простыми, когда я их выписываю, но я не хочу, чтобы GUI был частично закодирован и затем осознайте, что мне нужно переписать его с помощью другого инструментария.

Следует отметить, что я написал эту программу на C++ и что я не хочу писать часть GUI на C или что-то еще, поэтому инструментарий должен поддерживать C++.

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

Наконец, я бы ДРАМАТИЧЕСКИ предпочел использовать инструментарий с открытым исходным кодом для инструментария с закрытым исходным кодом.

Помимо этого я не могу придумать ничего, чтобы добавить. Заранее благодарю за ваше время и ответы.

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

ответ

26

Для C++, на мой взгляд, Qt является наименее расстраивающим и наиболее полнофункциональным инструментарием. Его также полностью перекрестная платформа. Обратите внимание, что Qt будет лицензироваться LGPL некоторое время в марте 2009 года, когда версия 4.5 станет доступной. В настоящее время он доступен только в версии GPL и коммерческой лицензии.

Дизайнер GUI Qt - это хорошо. Он имеет множество функций утилиты (библиотека графа сцены, поддержка перевода, встроенный механизм Javascript, встроенная библиотека WebKit). Через MOC (специальный предварительный компилятор) он также предоставляет несколько возможностей привязки во время выполнения и интроспекцию на C++.

Для вашего технического приложения вы можете обнаружить, что Qwt (http://qwt.sourceforge.net/) обеспечивает то, что вам нужно. Он построен на Qt.

Qt может использоваться даже без «головок», если вы хотите, чтобы его утилита (например, сеть и т. Д.) Без GUI.

Другая кроссплатформенная версия C++ - это wxWidgets, которая может использоваться, но не очень сопоставима с Qt. Его набор инструментов с более низким уровнем и не так прост в использовании или полностью округлен.Gtkmm - еще один вариант, в духе GTK +.

+0

Есть еще один вариант C++: FLTK. По общему признанию, он ориентирован на приложения OpenGL, но является полнофункциональным API-интерфейсом C++ GUI и находится под модифицированным LGPL (со статическим связующим исключением). – greyfade

+0

Gtkmm работает и над окнами. – drby

+1

Я второй предложение Qt. По моему опыту, Qt - это высококачественный кросс-платформенный инструментарий GUI. –

1

Qt. Также вы можете использовать KDE, который построен на вершине Qt.

+0

Возможно, это глупый вопрос, но не KDE в значительной степени Linux? –

+0

Совсем не глупый вопрос :-) KDE _mostly_ используется в Linux, но вы можете писать приложение с использованием KDE-библиотек, и в принципе нет ничего, чтобы остановить его от работы в Windows. –

19

Попробуйте WxWidgets. Кросс-платформа (компиляция на Linux, Mac OS X и Windows) и широко принята.

http://www.wxwidgets.org/

с открытым исходным кодом тоже!

4

Я бы сказал, что это зависит от того, хотите ли вы, чтобы пользовательский вид Look and Feel из ОС, предназначенных для вашего приложения. Qt, как было сказано ранее, является, пожалуй, самым легким из кроссплатформенных наборов инструментов, но это его собственный набор виджета. Вы не получите внешний вид приложения &, если только вы не работаете в KDE.

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

+1

Внешний вид Qt на платформах заметно улучшился с точки зрения смешивания с вашим рабочим столом. В Windows это действительно похоже на приложение Windows. То же самое с OS X, панель меню приложения и все. –

+0

В то же время вы по-прежнему используете разные наборы классов для целей Windows и целей Mac. Из QMacStyle для OS X и QWindowsXPStyle для Windows, тогда как wxWidgets имеет один API для всех платформ –

+0

Я думаю, вы неправильно поняли, как стили работают в Qt. Фактический API идентичен, механизм моделирования - это отдельный компонент, который часто даже не нужно касаться. Единственный случай для передачи особого поведения - это стиль ваших собственных виджетах, созданных с помощью виджета, что тоже не работает с wx. –

3

Я также рекомендовал бы wxWidgets вместе с DialogBlocks, что является действительно приятным визуальным графическим дизайнером.

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

6

Я вижу, что никто не комментировал GTKmm. Это воплощение C++ для GTK +, и это очень приятно использовать. Я также использовал Qt, но мне не нравится беспорядочный сигнал/код подключения, генерируемые файлы moc_XXX и т. Д. GTKmm имеет сигналы и т. Д., Но не этот шаг предварительной обработки, а также почти весь набор инструментов Qt может предложить в графическая арена.

+0

Не говоря уже о том, что Gtk более распространен в Linux, поэтому пользователи будут более привыкать к внешнему виду вашего приложения. – Lalaland

+0

При использовании CMake материал «moc» обрабатывается автоматически и без какого-либо управления пользователем. – antonone

4

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

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

Мой результат? Поскольку почти 9 лет я использую Qt (но первые годы только для GUI), теперь у меня очень сложные сетевые приложения с балансировкой нагрузки, массивной многопотоковой обработкой и обработкой изображений.

Вы можете использовать Qt как коммерческий пользователь с профессиональной поддержкой (например, я) или просто начать свои проекты под GPL и с помощью 4.5PL с LGPL (что позволяет коммерческое использование).

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

Но если вы хотите хорошо документированное и полное решение, то Qt - ваш выбор.

С наилучшими пожеланиями, 3DH

0

Я использую wxWidgets (инструментарий) + wxFormBuilder (GUI-дизайнер) + eclipse (ИДУ). Все инструменты являются кросс-платформенными и бесплатными.