Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Дмитрий Коняев ([info]dimchansky)
@ 2005-06-11 23:22:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Trolltech Qt/Windows
Решил посмотреть в сторону кроссплатформенного GUI ну и вообще на что-то более высокого уровня, чем MFC. Посмотрел на win32gui. Под рукой не было VC 7.1, попробовал на Dev-Cpp (MinGW) - понял, что идея неплохая всё "зашаблонить" и по максимуму уйти от сообщений системы, но с этим детищем нужно немало разбираться, а наработок под него маловато. Кроме того на кроссплатформенность у него пока только претензии, реально он пока только под windows заточен. :) Потом есть пару претензий к коду. Блуждая по его исходникам, наткнулся на win32gui\detail\ts\critical_section.hpp у которого критическая секция в конструкторе инициализировалась, а деструктор отсутствовал напрочь. Этого я вообще не понял. Это что, недокументированая возможность забывать деинициализировать критическую секцию или я не понял всей глубины? Вообщем, сразу у меня возникло слишком много вопросов и претензий, решил, что тратить время на него рано и неоправдано дорого.
Полазив по форуму rsdn.ru, пришёл к мнению, что Qt от Trolltech совсем неплох. Тут интересная идея с сигналами и слотами. На счёт этого на форуме rsdn.ru интересное сообщение, на которое стоит помедитировать:
Воспринимай тесно связанные группы сигналов какого-либо класса Qt (напр. QListBox) как интерфейсы стратегий. Класс формы (напр. QDialog) агрегирует QListBox по значению, и реализует некоторые из этих интерфейсов (объявляя соответствующие наборы защищенных виртуальных абстрактных слотов), параметризуя ими QListBox в своем конструкторе. Таким образом мы получаем абстрактный класс, трансформирующий модель "агрегирование + рассылка сообщений через механизм signal/slot" на хорошо знакомую "простое наследование + виртуальные функции". Теперь привычно?
А вот если у издателя имеется несколько подписчиков, то тут мы уже имеем дело с сервером и его клиентами. Но такие вещи в Qt Designer не делаются.
Поставил себе Qt 3.3.2 для windows enterprise версию. На сайте есть версия и повыше, но evaluation. Пока не ставил её. Вообще говоря, основной минус цена. Enterprise версия стоит нереально дорого для коммерческого использования на одного девелопера, professional - не меньше.
Под линукс правда для некоммерческого использования третья версия под GPL есть. Обещали, что четвёртая верися под Windows будет тоже под GPL для некоммерческого использования. Кстати, KDE написан с использованием Qt. :) Skype, кстати, тоже.
Если кто из программеров читает и в теме, т.е. может посоветовать ресурсы по теме, а особенно если есть запасённые лекарства от жадности для последней версии под Windows буду очень признателен.
Собрал по туториалу конвертер длин - остался очень доволен. :)

З.Ы.:
А статусбар у приложения вещь не кроссплатформенная? Т.е. на MacOS, на Иксах она есть или нету? В стандартных виджетах Qt статусбара не нашёл.


(Добавить комментарий)


[info]psr1913plus16@lj
2005-06-11 17:01 (ссылка)
А не поздно ли все это? Java и C#, по-моему, все сметут. C/C++ останется только как "переносимый ассемблер".

(Ответить) (Ветвь дискуссии)


[info]dimchansky@lj
2005-06-12 04:31 (ссылка)
Если нужно одно инженерное решение для разных платформ, при этом, чтобы оно работало максимально быстро (используется масса математических алгоритмов), то лучше C++ не найти. Если понадобится перейти на embedded (а это может быть уже не за горами), то Qt + C++, по-моему, неплохой выбор.
Java и C# возьмут свою часть рынка, но не сметут всё. C++ будет жив по-прежнему, просто хороших специалистов по нему будет меньше.
Кстати, недавно была новость "Создатель C++ уверен в будущем своего языка (http://citforum.ru/news/show.php?id=7526)". :)

(Ответить) (Уровень выше)

GTK+
(Анонимно)
2005-06-13 08:05 (ссылка)
Еще как вариант, могу посоветовать посмотреть в сторону GTK+ (http://gtk.org/) (тот, на котором написаны Gnome, Gimp и Gaim помимо всего прочего).

Оригинально написан на C, но есть биндинги для C++, Java, Perl, Python + вагон и маленькая тележка (http://gtk.org/bindings.html).

Лицензия LGPL --- можно использовать в закрытых проэктах.

Есть конечно и свои минусы - библиотека виджетов попроще чем у QT, но в общем и целом архитектура очень складная и понятная. Оставила приятное впечатление.

--
Андрей

(Ответить) (Ветвь дискуссии)

Re: GTK+
[info]dimchansky@lj
2005-06-13 08:16 (ссылка)
Ещё советовали wxWindows и FLTK. Но пока кроме Qt ничего не смотрел.
Вообще, Qt мне очень понравился сразу. Наверное, пока в нём не разберусь более-менее, на остальное смотреть не буду пока, т.к. времени не особо.

Слушай, так а статусбар вещь чисто виндовозная?

Оффтоп:
Андрей, заведи себе ЖЖ что ли для чтения. :) Тогде тебе будут ответы приходить на мыло.

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: GTK+
(Анонимно)
2005-06-13 08:27 (ссылка)
StatusBar в QT: http://www.jtz.org.pl/Inne/QT-Tutorial/qstatusbar.html

--
Андрей

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: GTK+
[info]dimchansky@lj
2005-06-13 08:31 (ссылка)
Да, уже нашёл.
Просто в QtDesigner его не обнаружил, посему и вопрос возник. Теперь другой вопрос. Если форма делается в дизайнере, то статусбар руками прописывать? :)

(Ответить) (Уровень выше)

Re: GTK+
(Анонимно)
2005-06-13 08:47 (ссылка)
Андрей, заведи себе ЖЖ что ли для чтения. :) Тогде тебе будут ответы приходить на мыло.

А отвечать на ответы emailом можно будет?

--
Андрей

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: GTK+
[info]dimchansky@lj
2005-06-13 09:24 (ссылка)
В email'e ответ приходит в виде HTML, там цитируется твоё сообщение и чей-то ответ на него. Ниже в письме сразу идёт форма, где ты можешь писать ответ и кнопка Post Rely. Но, я так понимаю, чтобы это (Post Reply) отработало от твоего имени, ты должен быть постоянно залогинен, наверное.
Я этой фишкой не пользуюсь, я иду на web сразу.

(Ответить) (Уровень выше)

wxWidgets
(Анонимно)
2005-06-13 08:23 (ссылка)
Еще есть матёрая библиотека wxWidgets (http://wxwidgets.org/). Разрабатывается уже чёрт знает сколько лет.

Её фишка в том, что приложение в результате использует native виджеты платформы, на которой работает, т.е. на Windows будут использоваться win32 кнопки, в линуксе GTK+, в макосе свои.

З.Ы.:
А статусбар у приложения вещь не кроссплатформенная? Т.е. на MacOS, на Иксах она есть или нету? В стандартных виджетах Qt статусбара не нашёл.

Статусбар такой-же кроссплатформенный как и скроллбар. В QT должен быть.

(Ответить) (Ветвь дискуссии)

Re: wxWidgets
[info]dimchansky@lj
2005-06-13 08:26 (ссылка)
Статусбар найден. :)

А в wxWidgets стили менять можно не на native? Как на счёт трансляции (смены языка) приложения?

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: wxWidgets
(Анонимно)
2005-06-13 08:43 (ссылка)
А в wxWidgets стили менять можно не на native?

Что значит менять стили? Если менять цвета и размеры, то да - можно. Если менять toolkit (т.е. чтоб в windows использавался например GTK+), то вряд ли (хотя для названного примера теоретическая вероятность существует)

Как на счёт трансляции (смены языка) приложения?

Проблема локализации в общем-то не связана с библиотеками виджетов, но в определённых кругах стандартом де факто является библиотека GNU gettext. Графический интерфейс: http://www.poedit.org/ (написан кстати на wxWidgets).


--
Андрей

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: wxWidgets
[info]dimchansky@lj
2005-06-13 09:27 (ссылка)
Что значит менять стили?

Ну запускаешь приложение, в параметре пишешь, например, -style=sgi и все контролы в стиле SGI. Стиль можно менять и во время выполнения программы. Только вот в Windows нельзя выбрать Mac стиль, а в Mac нельзя Windows. :)

Проблема локализации в общем-то не связана с библиотеками виджетов

В Qt, насколько я пока разобрался, пишешь всё, что должно переводиться в виде tr("Find"), потом создаёшь переводы для разных языков и приложение можно запускать с любым языком.

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: wxWidgets
(Анонимно)
2005-06-13 09:38 (ссылка)
Ну запускаешь приложение, в параметре пишешь, например, -style=sgi и все контролы в стиле SGI.

Такого в wxWidgets сделать нельзя по объективным причинам. Он не сам рисует кнопки, он просит это сделать ОС.

В Qt, насколько я пока разобрался, пишешь всё, что должно переводиться в виде tr("Find")

В gettext тоже самое, только там принято называть функцию для перевода "_": printf(_("Find")).

--
Андрей

(Ответить) (Уровень выше)