Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Чем вы пользуетесь?


Автор: JackYF 22.11.2007, 20:29
Ставим отметки, кто чем пользуется.

Если выбираете вариант "другой", не поленитесь в сообщении указать какую.
Комментарии по теме приветствуются.

Модератор: пожалуйста, никаких тематических вопросов в этой теме.

Автор: archimed7592 22.11.2007, 20:36

M
JackYF
Отредактировал. Имелись в виду графические библиотеки.

JackYF, а что вариантов ответа так мало? smile
Разве этим списком ограничивается набор кроссплатформенных библиотек?
А как же icu, boost, libcurl, xerces+xalan(это хотя бы те, что покрывают некотрые неГУЁвые части Qt, причём, как правило, ф-ционал предоставляют лучший, чем Qt)?


Автор: nickless 22.11.2007, 20:42
Может тогда переделать вопрос на "Какими графическими кроссплаттформенными библиотеками вы пользуетесь"?

По сабжу ответил Qt

Автор: Lazin 29.11.2007, 11:48
ответил wx, хотя это уже в прошлом))

Автор: powerfox 10.1.2008, 01:30
Qt (на уровне "с доками накалякаем"). Последний месяц (и в будущем с января) пришлось углубиться в gtk2 - полный Ацтой по сравнению с Qt (по функциональности, юзабилити (ООП рулит), документации (по Qt4 она в разу лучше) ).

Автор: Zaff 13.1.2008, 16:23
Qt мне конечно очень нравится, как и Windows и все остальное коммерческое. Но я не настолько богат, чтобы использовать ее в своих проектах. Поэтому приходится обходиться либами попроще: 
  • wxWidgets (очень удобная, гибкая, но если использовать GTK - возможны тормоза, с x11 все ок; отлично документирована), 
  • fox - очень нравится скорость работы, но плохо документирована и удобство не на высоте.

Автор: nickless 13.1.2008, 16:40
Цитата(Zaff @  13.1.2008,  14:23 Найти цитируемый пост)
и все остальное коммерческое

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

Автор: vadiml 14.1.2008, 23:02
У меня сейчас основная Qt
а так еще Tk и Gtk

Автор: LazyVoid 4.3.2008, 01:38
Голосовал за Qt.
Уже сказано о удобстве использования, великолепной документации и т.д. и т.п., от себя же хочу добавить что как только начал с ней знакомиться она просто прикипела как родная и на другие даже смотреть неохота.
Раньше пробовал изучить Tk, но как то не пошло, а здесь получаешь удовольствие от ее изучения и применения, даже не верится что все так просто. (-:
З.Ы. не реклама, а исключительно ИМХО (-;

Автор: anatox91 2.4.2008, 17:27
Цитата

Голосовал за Qt.
Уже сказано о удобстве использования, великолепной документации и т.д. и т.п., от себя же хочу добавить что как только начал с ней знакомиться она просто прикипела как родная и на другие даже смотреть неохота.

+1000000000000

Автор: Maka6er 31.5.2008, 20:01
Изучаю QT. До этого программы с графическим интерфейсом писал только с использованием windows forms. Разница конечно...нет слов. QT - рулит smile 

Автор: anatox91 7.6.2008, 12:59
мдаа... преимущество Qt в голосовании подавляющее  smile 
что, впрочем неудивительно  smile 

Автор: byNet 17.11.2008, 16:18
+1 qt. На данном этапе изучаю. Библиотека сделана на ура! smile  smile  smile 

Автор: JavaCraft 19.11.2008, 15:07
А я против, как из принципа(против массы и лукавых маркетологов), так и по сути. wxWidgets ничем QT не уступает. Юзал обе. Сейчас делаю на wxWidgets довольно тяжелый проект с обработкой растровой графики и видеопотоков, векторной графикой, полноценным GUI, взаимодействием с внешними устройствами и БД. Никаких преимуществ QT над wxWidgets не вижу.

Автор: SABROG 19.11.2008, 22:56
Цитата(JavaCraft @  19.11.2008,  15:07 Найти цитируемый пост)
Никаких преимуществ QT над wxWidgets не вижу. 

Цитата провоцирующая на холивар smile Если проводить раскопки, то минусы и плюсы можно найти везде. 

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

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

Мне нравится intel компилятор за хорошую оптимизацию кода, мне нравится компилятор microsoft за скорость выполнения кода, мне нравится gcc за кроссплатформенность и придерживание стандартов.

Мне нравится ассемблер за то, что он не ограничивает меня ни в чем, с ним я чувствую себя свободно. С ним для меня есть только один тип данных - байт, остальное - вариации. Это то, что позволяет заглянуть внутрь любой программы независимо от языка программирования.

и т.д., можно продолжать долго.

А Qt я выбрал не потому, что он лучше wxWidgets, просто я еще не чувствую, что Qt я знаю хотябы на 70%, чтобы изучать другую библиотеку и начать проводить параллели. Но что-то мне подсказывает, что 90% классов, которые есть в Qt я найду в любой другой библиотеке, хотябы потому, что конкуренция ведет к стиранию разницы. Т.ч. перескочить с одной на другую врятли будет большой проблемой.

Автор: andrew_121 16.2.2009, 00:38
SABROG, Вот задвинул!
+1

Автор: Arch1S 14.3.2009, 19:44
приходится работать с QT под KDE, а GTK под Gnome, но мне больше нравится конечно Qt, из-за документации и красивого ООП + хоть некоторые книги есть на русском

Автор: GavriKos 24.7.2009, 15:00
Долгое время работал с мфс. Сейчас решил перейти на бесплатную библиотеку. Выбор пал на виджеты (причина банальна - есть кому помочь с ними). Что понравилось:

1) просто огромное количесвто паралеллей с хорошими вещами мфс. То, что в мфс было неудобно - исправлено на лучшие вещи. 
2) следствие из первого - достаточно быстро можно перенести программу с мфс на кросплатформенность
3) Хорошая интегрируемость. Это я про отдельный редактор дилогов.

Не понравилось:
1) Отсутствие литературы. Ну или ее настолько мало что просто не достать
2) Отсутствие документации по сборке и функционалу "в коробке" (пришлось все выкачивать отдельно)

В целом для меня плюсы перевесили минусы ))

Автор: SABROG 24.7.2009, 17:01
Цитата(GavriKos @  24.7.2009,  15:00 Найти цитируемый пост)
Сейчас решил перейти на бесплатную библиотеку.

На какую, если не секрет?

Автор: ufna 24.7.2009, 18:30
судя по посту выше, wxWidgets

Автор: KaraKum 21.4.2010, 12:46
Меня сильно удивил в результате опроса тот факт, что wxWidgets популярнее чем Gtk+ - так как второй является основой Gnome, а он, в свою очередь, единственный конкурент KDE (тобеж Qt), да и вообще сообщество Gnome огромно (самый полпулярный дистрибутив Linux - Ubuntu - устанавливается с Gnome), а вот о wxWidgets ничего не слышно...

Автор: Дшпыук 14.5.2010, 12:19
Может быть это потому что не все программисты линуксоиды(и наоборот)?.. Да и вообще выбирать библиотеку по ДЕ я бы не стал, ибо сам юзаю гном, а пробую изучать Qt, и не потому что мне КДЕ нравится, а потму что для меня Qt удобнее (сигналы и слоты - они прекрасны), Gtk например сразу как то не пошел) А теперь совсем не хочется пересаживаться на что то другое) Так и с виджетами, кто то попробовал - понравилось, и просто не захотел переходить на что то иное.

Автор: boostcoder 14.5.2010, 12:56
Цитата(Дшпыук @  14.5.2010,  12:19 Найти цитируемый пост)
Может быть это потому что не все программисты линуксоиды(и наоборот)?

нет, не в этом дело.
я использую и пишу под линукс. видавс видел очень давно. GTK не использую ибо оно Си. Qt использую чтоб какой-то гуй быстро накодить. но технически, wxWidgets нравится больше.
еще есть прекрасная либа для создания гуя - egui. жаль что только под венду :(

Автор: RedDigger 25.9.2010, 00:34
Цитата

Цитата(Дшпыук @  14.5.2010,  12:19 Найти цитируемый пост)
Может быть это потому что не все программисты линуксоиды(и наоборот)?

нет, не в этом дело.
я использую и пишу под линукс. видавс видел очень давно. GTK не использую ибо оно Си. Qt использую чтоб какой-то гуй быстро накодить. но технически, wxWidgets нравится больше.
еще есть прекрасная либа для создания гуя - egui. жаль что только под венду :(


Работал на всех сдесь приведенных фреймворках.. мой выбор пал на Qt потому что я ярый приверженец С и С-подобных языков(в часиности С++)
мне на нем работать проще и проекты быстро поднимаются.. 

Сам Линуксоид. 
Ось - Gentoo Base System release 2.0.1
Компилятор - gcc version 4.3.4 (Gentoo 4.3.4 p1.0, pie-10.1.5)
Фреймворк - Qt: 4.6.2
ДМ - KDE Development Platform: 4.4.5 (KDE 4.4.5)
IDE - QtCreator - 1.3.1

А на счет вашего спора - могу сказать что он не имеет конца ибо вопрос из темы кому что нравится.. и можно до безконечности спорить чей язык мощнее или чья среда удобнее.. У всего есть плюсы и у всего есть минусы.. К примеру Пролог тоже очень полезный и малоиспользуемый язык но для написания экспертных систем - нет ничего лучше (опятьже ИМХО)

Автор: GavriKos 8.3.2011, 11:22
Цитата

А на счет вашего спора - могу сказать что он не имеет конца ибо вопрос из темы кому что нравится.. и можно до безконечности спорить чей язык мощнее или чья среда удобнее.. У всего есть плюсы и у всего есть минусы.. К примеру Пролог тоже очень полезный и малоиспользуемый язык но для написания экспертных систем - нет ничего лучше (опятьже ИМХО)


А никто особо и не спорит ;-)

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

Автор: bsa 28.3.2011, 11:00
Цитата(GavriKos @  8.3.2011,  11:22 Найти цитируемый пост)
Нашел для себя еще один плюс виджетов. Можно сидя под линухом спокойно собирать программы под винду. Не знаю, может в Qt такое тоже можно - не пробовал. 

Это называется кросс-компиляция. http://silmor.de/29.

Автор: _GRIN_ 28.3.2011, 12:01
Присоединяюсь, Qt пока ещё знаю плохо, что бы на другие глядеть - а свободного времени 0. Но в целом очень радует, особенно документация.

Автор: SolRus 25.8.2011, 19:16
не участвовал в опросе, так как не владею знанием не одним из виджетов, сейчас решил освоить кросплатформенный виджет для gui user posted image
qt не устроил ибо при статической линковке:
1. нужно платить
2. размер программы получается существенный
при динамической приходится тягаться с библиотеками... примерно также как давно было с net. framework - пришлось ставить библиотеку 2.0 которая тогда весила гдето метров 20 (это было еще до выхода vistы)

читаю описание WxWidgets в вики:
Цитата
Другая отличительная особенность — wxWidgets использует графические элементы интерфейса операционной системы. Многие фреймворки такие как Swing и Qt используют собственные графические элементы управления, снабжая их сменяемыми темами для каждой платформы. Напротив, wxWidgets использует родные графические элементы пользовательского интерфейса всюду где это возможно. В результате они не только выглядят как родные для операционной системы — они на самом деле родные
вот это хорошо, имхо. буду смотреть пока эту.

а gtk как работает - с ОС элементами или создает свои элементы?
чтот смотрю в опросе ответили 17 тел "другой", а в коментах помимо TK больше ничего не заметил.

ps: подскажите вот знаю что в win можно использовать windows region (непрямоугольные окна), а linux или macos тоже может так? и какие виджеты это поддерживают? в вики написано tk поддерживает, однако Последняя версия 8.5.7 (15 апреля 2009 года) - она того? user posted image
user posted image

Автор: kemiisto 25.8.2011, 20:53
Цитата(SolRus @  25.8.2011,  18:16 Найти цитируемый пост)
1. нужно платить

Это заявление не верно. Точнее, не совсем верно. Сто раз уже обсуждалось повторяться не буду.

Цитата(SolRus @  25.8.2011,  18:16 Найти цитируемый пост)
читаю описание WxWidgets в вики

Технические статьи из русскоязычной Педивикии цитировать при нулевой компетенции в вопросе крайне глупо. Почти всегда попадёте впросак. Приведённая цитата обсуждалась так же сотни раз. В настоящий момент времени всё, что там написано - бред.

Цитата(SolRus @  25.8.2011,  18:16 Найти цитируемый пост)
2. размер программы получается существенный

Существенный - это сколько, простите, в граммах?

Цитата(SolRus @  25.8.2011,  18:16 Найти цитируемый пост)
при динамической приходится тягаться с библиотеками...

Вот в который раз читаю и всё никак не пойму - что тягостного то?

Добавлено через 2 минуты и 27 секунд
Цитата(SolRus @  25.8.2011,  18:16 Найти цитируемый пост)
а gtk как работает - с ОС элементами или создает свои элементы?

Вот там точно свои.

Добавлено через 3 минуты и 13 секунд
Цитата(SolRus @  25.8.2011,  18:16 Найти цитируемый пост)
в вики написано tk поддерживает

Tk в 2011 можно использовать разве что для прототипирования.

Добавлено через 12 минут и 49 секунд
Цитата(SolRus @  25.8.2011,  18:16 Найти цитируемый пост)
чтот смотрю в опросе ответили 17 тел "другой", а в коментах помимо TK больше ничего не заметил.

Из более-менее живого и используемого есть ещё FLTK, FOX, Ultimate++.

Автор: SolRus 25.8.2011, 22:23
а ну видимо я ошибся при GNU LGPL можно статически линковать... \\?
существенный ну в зависимости от функциональности. к примеру windjvu, mtorrent, virtualdub
заметь этим программам не нужно тягать в своем дистрибутиве к примеру библиотеку QtGui4.dll (почти 10 мб)

Цитата(kemiisto @ 25.8.2011,  20:53)
Технические статьи из русскоязычной Педивикии цитировать при нулевой компетенции в вопросе крайне глупо. Почти всегда попадёте впросак. Приведённая цитата обсуждалась так же сотни раз. В настоящий момент времени всё, что там написано - бред.

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

ps: можно ли на qt написать программу которая по сути имеет лишь несколько графических элементов ( кнопка, комбобокс, таблица) размером <1 мбайт? < 100 кбайт? подразумевается статическая линковка

user posted image user posted image user posted image

Автор: kemiisto 25.8.2011, 23:12
Цитата(SolRus @  25.8.2011,  21:23 Найти цитируемый пост)
а ну видимо я ошибся при GNU LGPL можно статически линковать... \\?

Явным образом http://www.gnu.org/copyleft/lesser.html не запрещает статическую линковку. В тексте лицензии вообще нет упоминания ни о каких линковках. Но там есть следующий момент. Должна существовать возможность связывания вашего ПО с новейшей версией программы или библиотеки, охваченной LGPL. 

Что для этого сделать написано в пункте 4d. Под циферкой 1 речь идёт как раз о той самой динамической линковке:
Цитата
1) Use a suitable shared library mechanism for linking with the Library.


А вот под циферкой 0 есть кое-что ещё, что пригодится как раз при статической линковке. Можно предоставить исходный код вашего приложения или объектный код, в таком виде, чтобы обеспечит возможность линковки с другой версией библиотеки.

Но это вопрос неоднозначный. То есть, если открывать исходники, то тут то всё однозначно и правильно. А вот вариант с предоставлением объектного кода спорный. Так что обычно рекомендуют LGPL-библиотеки линковать динамически, если не хотите открывать исходный код. Даже у Qt это не раз озвучивалось.

Но если стоит вопрос "Позволяет ли LGPL статическую линковку?", то ответ "Да, конечно." Только исходный код придётся открыть. Ну или вот этот спорный вариант с объектным кодом использовать...

Цитата(SolRus @  25.8.2011,  21:23 Найти цитируемый пост)
к примеру windjvu, mtorrent, virtualdub

Забавные у тебя примеры. Windows-only программы сравнивать с программами, написанными под кросс-платформенную либу? Смеёшься?

Цитата(SolRus @  25.8.2011,  21:23 Найти цитируемый пост)
заметь этим программам не нужно тягать в своем дистрибутиве к примеру библиотеку QtGui4.dll (почти 10 мб)

Спасибо, что просвятил. smile 

Цитата(SolRus @  25.8.2011,  21:23 Найти цитируемый пост)
ну, эт... самое...) раз такой умный, может сам напишешь что там должно быть на твое усмотрение, я скажу спасибо и остальные пользователи рувики (хотя думаю тебя это не мотивирует)

Меня это мотивирует не достаточно. Скажем так - есть дела и поважнее.

Цитата(SolRus @  25.8.2011,  21:23 Найти цитируемый пост)
ps: можно ли на qt написать программу которая по сути имеет лишь несколько графических элементов ( кнопка, комбобокс, таблица) размером <1 мбайт? < 100 кбайт? подразумевается статическая линковка

Я статически ни разу не линковал. Но думаю, что ответ, скорее, отрицательный.

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

Автор: bsa 29.8.2011, 10:33
Цитата(SolRus @  25.8.2011,  22:23 Найти цитируемый пост)
ps: можно ли на qt написать программу которая по сути имеет лишь несколько графических элементов ( кнопка, комбобокс, таблица) размером <1 мбайт? < 100 кбайт? подразумевается статическая линковка

Qt не сильно предназначен для создания программ уровня "привет мир". Основное - создание бизнес-приложений (например, Adobe Photoshop). В таких приложениях размер библиотеки 10-20 МБ не считается чем-то экстраординарным. Зато очень ценится возможность быстро написать основную часть программы не заморачиваясь на создание кнопочек/окошек, а так же при необходимости портировать на другую платформу.
Например, начинающий программист вряд ли оценит то, что интерфейс для работы с таблицей в SQL БД делается всего в 10-20 строк. Ну не надо ему это...

Автор: Amp 6.9.2011, 22:37
Gtk+ пытается в Windows работать точно также как и Qt - получает через системный вызов битмап с отрисованным контролом (или же его части) и блитит его на окно. Но так как почти всем плевать на поддержку win32-версии gtk+, то до ума рендеринг системной темы не доведен (например отсутствует анимация fade in/out в Vista/7).

Автор: Randajad 10.6.2012, 16:36
Это ваше Qt использует MOC, что не является нативными сями, плюс лицензия.
wxWidgets действительно использует нативные контролы и весит много меньше. Хеломир меньше метра собрать реально, возможности сопоставимы с кт.
Так что именно по этому его и выбираем!

Ах да, хочу передать привет тем людям, кто считает, что .net - это нормально. Вас проклинают те люди, которым из-за вашей проги с одной кнопкой нужно тащить 30 метров этого уродства.

Автор: _GRIN_ 10.6.2012, 22:50
основной плюс при выборе Qt - это документация (и онлайн и асситент интегрированный в creator).

Цитата(Randajad @  10.6.2012,  14:36 Найти цитируемый пост)
Это ваше Qt использует MOC, что не является нативными сями

=) после определнного момента перестаёшь обращать внимание не то что на чистоту языка, а вообще на язык. Любой необходимый базис нового языка изучается за неделю на ура. Так что это скорее предрассудок. Или вы про инструментарий (компиляторы)? В таком случае даже "чистый спп" (например 2011) не всеми компиляторами поддерживается в полной версии.

Цитата(Randajad @  10.6.2012,  14:36 Найти цитируемый пост)
плюс лицензия

А в чём проблема с лицензией.
Если пишешь для себя, то спокойно юзай опенсорс вариант.
Если ты продаёшь свой продукт (и продаёшь успешно) то спокойно можно отстегнуть за удобный инструмент (ты же по сути тоже за свой труд хочешь деньги получать).

Цитата(Randajad @  10.6.2012,  14:36 Найти цитируемый пост)
Хеломир меньше метра собрать реально

Размер результирующего файла (из личного опыта) интересует разве что определённую группу программистов, придающих этому внимание.
Остальных и пользователей в том числе это интересует по сути в последнюю очередь.
Есть конечно исключения для эмбеддед систем, но там обычно вообще на си и асме пишут.

Автор: Randajad 11.6.2012, 08:32
MOC можно приделать далеко не к любому IDE. Qt становится невозможно юзать без перехода к другому IDE.
Конечно можно отстегнуть, наверное так и надо делать. Слово экономия нам чуждо. Действительно, сейчас все богатые, а в компьютерах харды уже на террабайты и памяти гигабайты. smile
Реализуя какой-нибудь алгоритм в своем приложении вы так же мыслите, позвольте поинтересоваться? smile

Если минус wxWidgets - это документация - да, там есть пробелы в ней. Но они не такие значимые, имхо.

Автор: borisbn 11.6.2012, 10:57
Цитата(_GRIN_ @  10.6.2012,  22:50 Найти цитируемый пост)
Если ты продаёшь свой продукт (и продаёшь успешно) то спокойно можно отстегнуть за удобный инструмент

Лицензия Qt не запрещает продавать свой продукт, сделанный из опенсоурс библиотеки. Даже не нужно, чтобы ваше приложение имело бы такую же лицензию. Главное - не изменять саму библиотеку.

Цитата(Randajad @  11.6.2012,  08:32 Найти цитируемый пост)
MOC можно приделать далеко не к любому IDE

А надо ? Есть IDE лучше, чем QtCreator под линукс и студия плюс Qt-шный аддон для Windows ?

Цитата(_GRIN_ @  10.6.2012,  22:50 Найти цитируемый пост)
Размер результирующего файла (из личного опыта) интересует разве что определённую группу программистов, придающих этому внимание.
Остальных и пользователей в том числе это интересует по сути в последнюю очередь.

Вот полностью согласен (никогда не понимал эту "определённую группу"). Randajad, вот скажи, неужели ты из двух программ, решающих  примерно одинаковые задачи (например - месенджеры QIP и PSI), выбираешь исключительно по тому, сколька каждая "весит" ? Разве не удобство, функционал, неглючность и т.д. и т.п. ?

Автор: boostcoder 11.6.2012, 11:27
Randajad, ты не о том говоришь.
первый и основной минус кути в том, что она не может без moc`а. а тот в свою очередь, не дает кодить в привычном для меня стиле, ибо запрещает шаблоны.
второй минус(на мой взгляд) - размножаются ###кодеры.

Автор: _GRIN_ 11.6.2012, 23:08
Цитата(Randajad @  11.6.2012,  06:32 Найти цитируемый пост)
Конечно можно отстегнуть, наверное так и надо делать. Слово экономия нам чуждо. Действительно, сейчас все богатые

Randajad, позволь вопрос - ты зарабатываешь программированием? Если да, то за свой труд ты бы хотел получать деньги? Почему же давит жаба оплатить труд других программистов, результатами которого ты пользуешься для своего заработка?
 Да и касательно использования опенсор для своей коммерции borisbn уже сказал. Просто до версии 4.5. наша фирма именно коммерческую лицензию покупала - вот я и по инерции - но суть таже.

Цитата(Randajad @  11.6.2012,  06:32 Найти цитируемый пост)
Реализуя какой-нибудь алгоритм в своем приложении вы так же мыслите, позвольте поинтересоваться? 

Зависит от "контекста" задачи (ТЗ, сроки выполнения и т.д.)

Цитата(boostcoder @  11.6.2012,  09:27 Найти цитируемый пост)
ибо запрещает шаблоны

разве? Спокойно юзаю шаблоны по мере необходимости.

Автор: boostcoder 11.6.2012, 23:13
Цитата(_GRIN_ @  11.6.2012,  23:08 Найти цитируемый пост)
юзаю шаблоны по мере необходимости

значит твоя необходимость мала.

Автор: _GRIN_ 11.6.2012, 23:17
Цитата(boostcoder @  11.6.2012,  21:13 Найти цитируемый пост)
значит твоя необходимость мала.

Вполне возможно, но мне хватает (шаблонные классы, шаблонные методы, шаблонные функции).

boostcoder, а можно пример кода (не зависимого от какой-либо библиотеки) содержий шаблон, который QtCreator не осилит?
Признаться очень интересно посмотреть.

Автор: alexvs11 11.6.2012, 23:25
Цитата(_GRIN_ @  11.6.2012,  23:17 Найти цитируемый пост)
а можно пример кода (не зависимого от какой-либо библиотеки) содержий шаблон, который QtCreator не осилит?

все-таки который MOC не осилит

Автор: boostcoder 11.6.2012, 23:28
Цитата(_GRIN_ @  11.6.2012,  23:17 Найти цитируемый пост)
а можно пример кода (не зависимого от какой-либо библиотеки) содержий шаблон, который QtCreator не осилит?

закодь любой класс наследник QObject, и сделай его частичную специализацию основываясь на компайл-тайм типах/константах. тут-то moc скажет, что он о тебе думает smile

Добавлено @ 23:33
хотя я удивлен тому, что кто-то этого не знает.
признаюсь, с использованием Qt не кодил уже больше двух лет. возможно moc пофиксили... но очень сомневаюсь. иначе его бы пришлось научить специализировать шиблоны и генерить http://gcc.gnu.org/wiki/GIMPLE. а это наверное половина компилятора.

Добавлено @ 23:37
а в качестве сигналов/слотов, он уже позволяет использовать шаблонные методы/функции/функциональные_объекты/лямбды?

Автор: _GRIN_ 11.6.2012, 23:48
Цитата(boostcoder @  11.6.2012,  21:28 Найти цитируемый пост)
закодь любой класс наследник QObject, и сделай его частичную специализацию основываясь на компайл-тайм типах/константах. тут-то moc скажет, что он о тебе думает 


такой пример (из одного моего работающего на местах) проекта подойдёт:
Код

template <class TServerItem>
class CComplectT : public QWidget
{
public:
    CComplectT(QObject* core,const QString&name,CAbstractView*parent) :
        QWidget(parent),
        m_parent(parent),m_core(qobject_cast<CGuiLogic*>(core)),m_name(name)
    {
        Q_ASSERT(m_core);
        Q_ASSERT(m_parent);
        m_grid = new QGridLayout(this);
        m_grid->setContentsMargins(2,4,2,2);
        m_grid->setSpacing(2);
        setPrivate();
    }
    virtual ~CComplectT(){}

protected:
    void setPrivate()
    {
        qtutil::safeClearMapOfPointers<ADP_TF_UID,CAbstractViewItem>(m_servers);
        Q_ASSERT(m_core->complects().contains(m_name));
        foreach(ADP_TF_UID uid,m_core->complects().value(m_name)) {
            CAbstractViewItem*server = new TServerItem(uid,m_core,this);
            connect(server,SIGNAL(evShow(ads::ADP_TF_UID)),m_parent,SIGNAL(evShow(ads::ADP_TF_UID)));
            m_grid->addWidget(server,0,m_servers.count());
            m_servers[uid] = server;
        }
    }

protected:
    CAbstractView* m_parent;
    CGuiLogic* m_core;
    QMap<ADP_TF_UID,CAbstractViewItem*>m_servers;
    const QString m_name;
    QGridLayout*m_grid;
};


тут правда шаблон нужен только в методе setPrivate() и там только конструктор шаблона с параметрами вызывался.
Но ничего другого под рукой нет к сожалению.

З.Ы. Я всё ещё достаточно плохо знаю кьют. Так что действительно посмотрел бы на ваш код илюстрирующий проблему.
Единтвенное ограничение, которое я знаю - это запрет множественного наследования qobject классов.

Добавлено через 5 минут и 11 секунд
Цитата(alexvs11 @  11.6.2012,  21:25 Найти цитируемый пост)
все-таки который MOC не осилит 

alexvs11, ваше замечание абсолютно верно =).
Мос имеет свои ограничения, и свои плюсы (сигналы слоты).
Сам по себе кьют использует moc для сигналов слотов. Если эти плюсы не нужны, то можно спокойно забить на moc и использовать кьют без генерации moc-файлов как обычно - просто не объявляйте Q_OBJECT (правда и без сигналов-слотов останетесь)

Автор: alexvs11 11.6.2012, 23:54
Цитата(boostcoder @  11.6.2012,  23:28 Найти цитируемый пост)
а в качестве сигналов/слотов, он уже позволяет использовать шаблонные методы/функции/функциональные_объекты/лямбды?

так как посылать/принимать сигналы могут только наследники QObject (вроде не только, но там с какими-то извращениями), то из этого списка вопрос только о шаблонных методах
http://doc.trolltech.com/qq/qq15-academic.html
думаю, что и сейчас невозможно

Цитата(boostcoder @  11.6.2012,  23:28 Найти цитируемый пост)
хотя я удивлен тому, что кто-то этого не знает.

видимо это достаточно редко требуется на практике?

Автор: boostcoder 11.6.2012, 23:59
не видно как используется CComplectT.

Цитата(_GRIN_ @  11.6.2012,  23:48 Найти цитируемый пост)
посмотрел бы на ваш код илюстрирующий проблему

в псевдокоде:
Код

template<bool, typename T>
struct matrix_processor;

template<typename T>
struct matrix_processor<true, T>: QObject {};
template<typename T>
struct matrix_processor<false, T>: QObject {};

...

template<typename Painter>
struct widget: QWidget {
   
   matrix_processor<
       boost::is_float<Painter::item_t>::value
      ,Painter::item_t
   > concrete_processor;
};


типа этого.

касательно же:
Цитата(boostcoder @  11.6.2012,  23:28 Найти цитируемый пост)
в качестве сигналов/слотов, он уже позволяет использовать шаблонные методы/функции/функциональные_объекты/лямбды?

это вряд ли.

Добавлено через 58 секунд
Цитата(alexvs11 @  11.6.2012,  23:54 Найти цитируемый пост)
видимо это достаточно редко требуется на практике?

видимо по разным книжкам учились?

Автор: Любитель 12.6.2012, 01:42
Цитата(boostcoder @  11.6.2012,  23:28 Найти цитируемый пост)
а в качестве сигналов/слотов, он уже позволяет использовать шаблонные методы/функции/функциональные_объекты/лямбды?

Qt 5. http://qt-project.org/wiki/New_Signal_Slot_Syntax

Автор: boostcoder 12.6.2012, 09:00
Цитата(Любитель @  12.6.2012,  01:42 Найти цитируемый пост)
Qt 5. http://qt-project.org/wiki/New_Signal_Slot_Syntax 

т.е. в конце этого месяца должен выйти релиз?
Цитата

Alpha released on April 3, 2012.
Beta release expected by April – May.
Final release expected by the end of June.

http://qt-project.org/wiki/Qt_5.0.

Автор: alexSl 12.6.2012, 10:42
Цитата(boostcoder @  12.6.2012,  09:00 Найти цитируемый пост)
т.е. в конце этого месяца должен выйти релиз?


Судя по тому, что пока нет бетты, то и релиз запоздает.

Автор: borisbn 12.6.2012, 10:53
Любитель, к сожалению и в этом варианте нет шаблонов. boostcoder прав - нет в Qt возможности связать шаблонный сигнал с шаблонным же слотом. А надо ?

Автор: boostcoder 12.6.2012, 11:02
Цитата(borisbn @  12.6.2012,  10:53 Найти цитируемый пост)
А надо ?

без этого никак.
какой-то недо-С++ получается. собственно и кутю не назовешь С++. так...Си с классами, не более.

Автор: Любитель 12.6.2012, 18:21
Речь о том, что функциональные объекты (в том числе лямбды_ могут выступать в качестве слотов.
А вот шаблонные сигналы.. Да, этого нету. Но откровенно область применения достаточно низкая (примеры приветствуются). Сигнал - это по сути часть интерфейса класса (обычный observer), мне лично сложно представить удачный пример, где реально нужен прям шаблонный сигнал.

Ну да, и если говорить про систему сигнал/слотов и пр. - то кроме Qt более удачной гуи либы для С++ я лично не знаю. Те жалкие function poiunter-ы в качестве колбэков в GTK+ или MFC-style месадж мэпы в wxWidgets.. Ужас smile

Можно, конечно, начать разговоры, что не нужно писать гуи на С++ итд, но это уже в другую тему надо.

Автор: alexvs11 12.6.2012, 18:23
Цитата(Любитель @  12.6.2012,  18:21 Найти цитируемый пост)
А вот шаблонные сигналы.. Да, этого нету. Но откровенно область применения достаточно низкая (примеры приветствуются). Сигнал - это по сути часть интерфейса класса (обычный observer), мне лично сложно представить удачный пример, где реально нужен прям шаблонный сигнал.

вот, както так

Автор: borisbn 12.6.2012, 18:54
Цитата(Любитель @  12.6.2012,  18:21 Найти цитируемый пост)
Можно, конечно, начать разговоры, что не нужно писать гуи на С++

Почему же в другую ? Я вот, например, сейчас как раз в поиске чем заменить гуи... Смотрю в сторону Java (нравится) и до-диез .Net (тоже)...
ИМХО те, кто делает гуи на Си++ - делают это по одной простой причине - больше ничего не знают (я, кстати, в их числе... пока...).
Лично мне Си++ нравится, но делать на нём гуи или веб-приложения - увольте...
Однако, если больше ничего не знаешь/не хочешь знать (нужное подчеркнуть), то КуТя - лучший вариант. ИМХО, ессно

Автор: alexvs11 12.6.2012, 18:58
Цитата(borisbn @  12.6.2012,  18:54 Найти цитируемый пост)
Смотрю в сторону Java (нравится)

вот уж не сказал, что на java удобней гуй делается, что с swing'ом, что например в андроиде
в кутях же теперь к тому же будет javascript'овая морда (QML)

Автор: borisbn 12.6.2012, 19:10
Цитата(alexvs11 @  12.6.2012,  18:58 Найти цитируемый пост)
вот уж не сказал, что на java удобней гуй делается, что с swing'ом, что например в андроиде

насколько я понял, на андрюшке просто ничего другого нету (можно только длл-ки какие-то низкоуровневые делать на плюсах - NDK, кажется)
Цитата(alexvs11 @  12.6.2012,  18:58 Найти цитируемый пост)
в кутях же теперь к тому же будет javascript'овая морда (QML)

что-то как-то о QML не очень позитивно народ отзывается - http://forum.vingrad.ru/forum/topic-347579.html

Автор: Любитель 14.6.2012, 18:26
Давайте плз в теме С++ не обсуждать прочие технологии. Для этого есть другие разделы на форуме.

Автор: JackYF 15.6.2012, 21:07
Да, товарищи, прежде чем писать пост, посмотрите на заголовок темы. Про Qt5 лучше обсуждайте в отдельной теме.


Автор: Amp 27.6.2012, 17:26
Цитата(Любитель @  12.6.2012,  18:21 Найти цитируемый пост)
или MFC-style месадж мэпы в wxWidgets.. Ужас 

В wxWidgets обработку событий можно делать через вызов Bind/Connect. Просто слишком много туториалов написано с использованием таблиц диспетчеризации, в т.ч. и их примеры.

Автор: boostcoder 28.6.2012, 11:23
Цитата(borisbn @  12.6.2012,  10:53 Найти цитируемый пост)
в Qt возможности связать шаблонный сигнал с шаблонным же слотом. А надо ?

а шаблонные функции надо?

расширим приведенный выше код так:
Код

template<bool, typename T>
struct matrix_processor;

template<typename T>
struct matrix_processor<true, T>: QObject {};

template<typename T>
struct matrix_processor<false, T>: QObject {};
...

template<typename Painter>
struct widget: QWidget {
   
   matrix_processor<
       boost::is_float<Painter::item_t>::value
      ,Painter::item_t
   > concrete_processor;

signals:
   void draw_item(const ???& item); // 1
};

...


struct dialog: QWidget {
   dialog() {
      connect(&_processor, SIGNAL(draw_item(???)), SLOT(draw_item(???))); // 2
   }

public slots:
   void draw_item(const ??? & item) { // 3
   }

private:
   widget _processor;
};

в первой точке, какой тип передается сигналом?
во второй точке тот же вопрос.
и самое интересное в третьей точке: мне что, писать слотов столько, сколько типов педедает сигнал? - бред же. это именно та ситуация, когда слот должен быть шаблонным. но кто его специализировать будет? moc? ;)

именно по этому я и говорю, что кутя не позволяет кодить в хорошем стиле . в стиле "Си с классами" - да, пожалуйста.

Автор: borisbn 29.6.2012, 08:31
Цитата(boostcoder @  28.6.2012,  11:23 Найти цитируемый пост)
в первой точке, какой тип передается сигналом?

как раз для такого случая есть вполне сносный костыль QVariant. Он в куте повсюду используется.

Добавлено через 2 минуты и 9 секунд
Кстати, обрати внимание, как тема называется:
Цитата
Какими графическими кроссплатформенными библиотеками вы пользуетесь?

Автор: boostcoder 29.6.2012, 10:16
Цитата(borisbn @  29.6.2012,  08:31 Найти цитируемый пост)
как раз для такого случая есть вполне сносный костыль QVariant.

костыль, иначе не назовешь. зачем статически типизированный ЯП превращать в динамически?

Цитата(borisbn @  29.6.2012,  08:31 Найти цитируемый пост)
Какими графическими кроссплатформенными библиотеками вы пользуетесь?

а это к чему?

Автор: alexvs11 29.6.2012, 10:20
Цитата(boostcoder @  29.6.2012,  10:16 Найти цитируемый пост)
а это к чему?

то что нормальный гуй на таком построен не будет

Автор: boostcoder 29.6.2012, 10:27
Цитата(alexvs11 @  29.6.2012,  10:20 Найти цитируемый пост)
 нормальный

относительно чего?

Цитата(alexvs11 @  29.6.2012,  10:20 Найти цитируемый пост)
на таком

на каком?
о чем речь?

Автор: spyswamp 26.7.2012, 14:05
Что вы заладили с этими шаблонами? Отключайте moc, подключайте свою систему сигнал-слотов и вперед, творить, так сказать! Все что решается в рамках Qt - надо решать в рамках Qt. Если это не подходит, то сраные Q_OBJECT отключаются, и начинается любимый хардкор. smile

Автор: boostcoder 26.7.2012, 14:22
Цитата(spyswamp @  26.7.2012,  14:05 Найти цитируемый пост)
Отключайте moc, подключайте свою систему сигнал-слотов и вперед

так и делаю.
потому и говорю, что кути нинужно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)