The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск графического тулкита GTK+ 3.22, opennews (??), 22-Сен-16, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


7. "Выпуск графического тулкита GTK+ 3.22"  +1 +/
Сообщение от yekmemail (ok), 22-Сен-16, 11:03 
Я! Я один раз писал на gtk, точнее на gtkmm. Я думал там С++, ООП, все дела. А они там голые указатели туда сюда кидают! Пока доки не перечитаешь 10 раз, непонятно кто чем владеет.
Ответить | Правка | Наверх | Cообщить модератору

12. "Выпуск графического тулкита GTK+ 3.22"  –1 +/
Сообщение от s (?), 22-Сен-16, 11:27 
Не знаю, когда ты что там тыкал, но ныне там умные указатели для всего.
Ответить | Правка | Наверх | Cообщить модератору

20. "Выпуск графического тулкита GTK+ 3.22"  +7 +/
Сообщение от yekmemail (ok), 22-Сен-16, 13:03 
> Не знаю, когда ты что там тыкал, но ныне там умные указатели
> для всего.

У них в сишном Gobject есть счетчик ссылок. Эти умные указатели ещё один добавляют получается?

Они даже специальную функцию придумали, чтобы каким то образом модифицировать объект, только ради того, чтобы будущий владелец виджета знал, что это именно он должен этот объект удалять. Тоесть в деструкторе он проходится по всем своим объектам, проверяет, делали ли на объекте Gtk::manage, и если да, то он его удаляет. Ну или расскажите, как это работает на самом деле?

Или вот например ихний glade. Зачем гуй в хмл? Как moc звать так у всех подгорает, а glib-compile-resources дык ничо, все довольны! Только вот qt сразу вам дает объект с нужными объектами, а в гтк надо юзать Gtk::Builder::get_widget(). Ой, что это? Ссылка на указатель, да ещё и шаблонным аргументом. А всё почему? Потомучто нельзя перегружать по возвращаемому типу. А зачем им знать тип объекта который мы хотим получить? Чтобы проверить и выкинуть соответствующее исключение, как это делает add_from_file() можетбыть? Да нифига, в случае ошибки он просто зануляет указатель. Причем если я получил топ-левел виджет, то я его должен удалять, а если нет, то он сам удалится. Логично!

Ну или вот например http://stackoverflow.com/questions/23315743/gtkmm-and-gtkbui...

Я лет 7 назад, когда был неопытный, и вообще ничего не понимал, испытывал меньше баттхерта при изучении qt, чем год назад при работе с гтк.

Ответить | Правка | Наверх | Cообщить модератору

33. "Выпуск графического тулкита GTK+ 3.22"  –5 +/
Сообщение от skybon (ok), 22-Сен-16, 17:00 
Glib::RefPtr использует счётчик GObject, но murrayc уже планирует переход на std::shared_ptr.

get_widget() и get_object() - согласен, неудачные методы. Я для них написал обёртки, чтобы возвращали указатель на вытащенный виджет/объект или кидали исключение.

https://github.com/skybon/obozrenie-cpp/blob/master/gtk/help...

Вообще gtkmm/glibmm сделан очень грамотно в плане архитектуры, но у их команды не хватает людей. Так бы давно уже на C++14 портировали и выкинули Glib::RefPtr.

Ответить | Правка | Наверх | Cообщить модератору

36. "Выпуск графического тулкита GTK+ 3.22"  +1 +/
Сообщение от yekmemail (ok), 22-Сен-16, 17:28 
> Вообще gtkmm/glibmm сделан очень грамотно в плане архитектуры, но у их команды
> не хватает людей. Так бы давно уже на C++14 портировали и
> выкинули Glib::RefPtr.

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

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

Ответить | Правка | Наверх | Cообщить модератору

51. "Выпуск графического тулкита GTK+ 3.22"  +/
Сообщение от skybon (ok), 22-Сен-16, 23:36 
Если где и есть острые углы, так это в gtkmm. А именно, те самые чистые указатели.

Дело в том, что здесь мы сталкиваемся с конфликтом иерархий владения. RAII можно использовать только для контейнеров, а всеми остальными виджетами всегда управляет родитель, выполняя роль unique_ptr. Собственно, для этого и есть Gtk::manage(), который привязывает время жизни виджета к контейнеру. Я не пишу на Qt, но вижу, что там примерно так же - QWidget "держится" за родителя.

http://doc.qt.io/qt-4.8/objecttrees.html

И gtkmm, и Qt имеют иерархию в иерархии (RAII держит контейнер, контейнер - дочерние виджеты). При этом последние лучше держать в динамической памяти, ибо иначе можно огрести из-за конфликта иерархий владения - см. ссылку. Так что богомерзкий new - необходимость в любом случае вне зависимости от тулкита.

Во всём остальном - и glibmm, и gtkmm, и libsigc++ хоть и используют Glib Mainloop, но разработчику предоставляют c++-style API с исключениями, лямбдами и православной реализацией string, которая ориентирована не на байты, а на символы UTF-8.

Ответить | Правка | Наверх | Cообщить модератору

40. "Выпуск графического тулкита GTK+ 3.22"  +/
Сообщение от Саня (??), 22-Сен-16, 18:57 
Ты тот молодой погромист, который не осилил Qt?
Ответить | Правка | К родителю #33 | Наверх | Cообщить модератору

69. "Выпуск графического тулкита GTK+ 3.22"  –2 +/
Сообщение от Аноним (-), 23-Сен-16, 15:22 
> Ты тот молодой погромист, который не осилил Qt?

Ему просто ехать не нужно, вот и не осилил. Ясно же, что для себя пишет (если пишет вообще).

Ответить | Правка | Наверх | Cообщить модератору

14. "Выпуск графического тулкита GTK+ 3.22"  –2 +/
Сообщение от Аноним (-), 22-Сен-16, 11:32 
> Пока доки не перечитаешь
> непонятно кто чем владеет

А надо было вначале релизить приложение на gtkmm, а потом уже читать доки по gtkmm? Смешной такой...

Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

25. "Выпуск графического тулкита GTK+ 3.22"  +1 +/
Сообщение от Orduemail (ok), 22-Сен-16, 14:36 
> Я думал там С++, ООП, все дела.

Ты хотя бы About читал к gtkmm, прежде чем начинать использовать библиотеку? gtkmm -- это обёртка над C'шными библиотеками. Или раньше не было опыта работы с обёртками?

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

Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

27. "Выпуск графического тулкита GTK+ 3.22"  +3 +/
Сообщение от yekmemail (ok), 22-Сен-16, 14:57 
>[оверквотинг удален]
> Ты хотя бы About читал к gtkmm, прежде чем начинать использовать библиотеку?
> gtkmm -- это обёртка над C'шными библиотеками. Или раньше не было
> опыта работы с обёртками?
> Обёртка всегда будет требовать знакомства с низлежащей библиотекой. Просто потому что.
> Работа с сисколлами через libc будет требовать хотя бы примерного знания
> того, что такое сисколл, как он реально вызывается, что представляет из
> себя обёртка над сисколлом в libc, откуда берутся все эти замечательные
> декларации структур и тд, и тп. Для этого не обязательно быть
> сертифицированным разработчиком ядра, но хотя какой-нибудь обзор на пару тысяч слов,
> призванный ликвидировать безграмотность, прочитать стоит.

std::thread тоже обертка над pthread и ничего, всё красиво. Так можно дойти до того, что все библиотеки это прослойки между сишным интерфейсом ядра и они должны ничем друг от друга не отличаться по степени гавености. Однако для гтк я привел пару примеров которые делают его большим гавном по сравнению с другими. Мне вот интересно, почему никто не может даже подумать о том, что разрабы этого гтк(мм) просто хреново всё продумали и получился монстр с непонятным апи? Там какието сверхчеловеки что ли сидят, которым нужно слепо доверять?
Что мешает этой обертке не юзать голые указатели и кидать исключения? В одном же месте они кидают аж три разных исключения (правда в примере зачемто их тут же обрабатывают), а в другом возвращают nullptr. А вы оправдывайте такое поведение библиотеки тем, что я якобы чтото там не почитал. Нет уж, давайте либо по существу, либо всётаки признаем что qt лучше. (хотел написать что гтк гавно, но ведь непоймут-с)

Ответить | Правка | Наверх | Cообщить модератору

32. "Выпуск графического тулкита GTK+ 3.22"  –3 +/
Сообщение от Аноним (-), 22-Сен-16, 16:41 
> либо всётаки признаем что qt лучше.

проще признать что у кого то руки крюки и голова для шапки

Ответить | Правка | Наверх | Cообщить модератору

43. "Выпуск графического тулкита GTK+ 3.22"  +1 +/
Сообщение от yaa (?), 22-Сен-16, 21:31 
> Обёртка всегда будет требовать знакомства с низлежащей библиотекой. Просто потому что

А на ... тогда обёртка?

Ответить | Правка | К родителю #25 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру