LINUX.ORG.RU

Что думаете о gtkmm?

 , ,


1

4

Что-то я попробовал писать на этом, думал, на крестах будет проще, чем на голой сишечке, но оказалось куда сложнее. Есть истории успеха?

Фанатиков более других тулкитов просьба не беспокоиться.

★★★★★

Ненужно. Используй <gtk/gtk.h> и std::, много кто так делает.

А проще будет на питоне, странно что ты не его взял.

MOPKOBKA ★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от Begemoth

Нет. Ну или ты имеешь в виду устойчивую привычку делать всё на цпп и яростное отрицалово любого отличного подхода.

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

meliafaro ★★★★★
() автор топика
Последнее исправление: meliafaro (всего исправлений: 1)
Ответ на: комментарий от vertexua

По сравнению с сишкой кода становится чуть ли не в 2 раза больше и абстракций надо держать раза в два больше.

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от conservator

А что на них толкового написано опенсорсного? Видел только Аудасити, и это ужас во всех отношениях, с какой не посмотри.

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от vertexua

Ну, есть autoptr, правда, только для gcc и clang. С ним вообще всё просто.

Код даже в примерах из документации выглядит монструозно. Ну и плюс ещё манера написания кода gtk/glib понятная интуитивно. Все функции/макросы, хоть и многословны, но из названия практически всегда ясно, где что делается. Плюсы в этом плане ничуть не менее многословны, но понятность кода куда хуже. Сигналы/слоты эти, опять же.

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от conservator

wxWidgets - кроссплатформенный MFC. Write once, и потом еще раз Write под каждую платформу, потому что везде все по разному отображается, сортируется, выглядит.

MOPKOBKA ★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от meliafaro

Gtk код вообще не выглядит большим, учитывая что всю тяжеловесную лапшу по изначальному построению окон уже никто не делает, а просто загружают через GtkBuilder. После того как он загрузит .glade файл можно просто получить указатели на небольшой процент нужных widgets и подцепить на них events.

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Glade же неюзабелен.

После того как он загрузит .glade файл можно просто получить указатели на небольшой процент нужных widgets и подцепить на них events.

Если пишешь на сишке можно прямо в Glade подцепить сигналы к функциям. Умеет ли так ваш руст?!?

MOPKOBKA ★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Glade же неюзабелен.

4.2. Код писать руками, расписывая каждый Box в разы более неюзабельно.

Если пишешь на сишке можно прямо в Glade подцепить сигналы к функциям.

Есть такое да. В других языках тоже неплохо, в принципе пару строчек и все.

if gtk::init().is_err() {
    println!("Failed to initialize GTK.");
    return;
}
let glade_src = include_str!("builder_basics.glade");  // Вкомпилируем .glade файл прямо в бинарь.
let builder = gtk::Builder::from_string(glade_src);

let window: gtk::Window = builder.get_object("window1").unwrap();
let button: gtk::Button = builder.get_object("button1").unwrap();
let dialog: gtk::MessageDialog = builder.get_object("messagedialog1").unwrap();

button.connect_clicked(move |_| { 
    dialog.run();
    dialog.hide();
});

window.show_all();

gtk::main();
vertexua ★★★★★
()
Ответ на: комментарий от MOPKOBKA

wxWidgets — кроссплатформенная библиотека, которая использует собственные элементы управления для правильного look & feel. А вот Qt рисует свои собственные виджеты на каждой платформе, хоть и использует native APIs.

conservator
()
Ответ на: комментарий от conservator

Обработка событий, результирующая визуальная обратная связь и макет виджета, — все всегда реализуется Qt.

conservator
()
Ответ на: комментарий от vertexua

4.2. Код писать руками, расписывая каждый Box в разы более неюзабельно.

Он падает, неправильно сохраняет с потерями, и многое другое.

MOPKOBKA ★★★
()
Ответ на: комментарий от meliafaro

манера написания кода gtk/glib понятная интуитивно. Все функции/макросы, хоть и многословны, но из названия практически всегда ясно, где что делается. Плюсы в этом плане ничуть не менее многословны, но понятность кода куда хуже. Сигналы/слоты эти, опять же.

ну то есть у тебя проблема в том, что ты не знаешь gtkmm, так?

Сигналы/слоты эти, опять же.

В gtk на С теже самые сигналы/слоты, ты о чём?

// c++
Gtk::Button button("Hello World");
button.signal_clicked().connect(sigc::ptr_fun(&on_button_clicked));
// c
GtkWidget* button = gtk_button_new_with_label ("Hello, World!");
g_signal_connect (button, "clicked", G_CALLBACK (on_button_clicked), NULL);
fsb4000 ★★★★★
()
Ответ на: комментарий от vertexua

Ну это да, но мне сейчас важнее понять сам библиотечный код, а не как мышкой накликивать виджеты.

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от MOPKOBKA

Не замечал такого, но я плотно пока ещё не использовал его в сколь-нибудь больших проектах.

meliafaro ★★★★★
() автор топика

Думаю что тебе нечего ответить. Хотя постой, внутри у электрона есть Chromium, а внутри хромиума 7 лет назад был gtk, но потом его изгнали ссаными тряпками, но какие-то зависимости от gtk остались.

peregrine ★★★★★
()

Если честно, то...

… я бы не рекомендовал gtkmm. ЕМНИП, там местами прямо сказано что в ряде случаев придётся использовать чисто GTK+ (сишный). А это уже формт жёсткого порно получается, причём, на ровном месте.

В результате, либо workaroundы придётся делать, да и сам по себе код будет ни фига не короче, чем на С. Скорее всего, объём кодовой базы проекта на сишечке будет поменьше.

Из сред разработки я бы настоятельнейшим образом рекомендовал бы gnome-builder + glade. Плюс к тому, для С хорошей заменой libstdc++ будет GLib.

Moisha_Liberman ★★
()
Ответ на: комментарий от conservator

над GTK3

Да ладно, вроде даже motif ещё жив

Shadow ★★★★★
()
Ответ на: Если честно, то... от Moisha_Liberman

Скорее всего, объём кодовой базы проекта на сишечке будет поменьше.

Вот это да, смущает.

Из сред разработки я бы настоятельнейшим образом рекомендовал бы gnome-builder + glade.

Так и делаю. Для разработки с ГТК он прекрасен. И Glade там вшитый.

Плюс к тому, для С хорошей заменой libstdc++ будет GLib.

GLib даже не для стандартной библиотеки цпп, там есть просто всё: работа с файлами и файловой системой на порядок круче, чем даже в Boost, треды, удобные контейнеры, смартпоинтеры, основной цикл, работа с XML, INI-конфигами, окружение, порождение процессов, нетворк, регулярные выражения, чексуммы, чего там только нет.

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от Shadow

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

meliafaro ★★★★★
() автор топика

А что можете сказать про слоты gtkmm? У меня сложилось впечатление, что это устаревшая концепция? Все простые примеры используют тупо шаблонные указатели на методы или лямбды. Их вообще надо знать или это какое-то древнее неупокоенное зло?

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от meliafaro

Пробовал глейд с питоном: на оранжпае без аппаратного ускорения оно просто не смогло, пришлось переписывать руками. Лесом этот ваш глейд!

anonymous
()

одна из проблем, которую имеет смысл учитывать: насколько комфортно будет впоследствии обновлять код для поддержки GTK4, 5, …

это достаточно просто делать если писать «нативно» на C, но bindings для других языков могут отличаться очень значительно, да и появятся не сразу.

waker ★★★★★
()
Ответ на: комментарий от vertexua

загружают через GtkBuilder. После того как он загрузит .glade файл

Я могу ошибаться, но вроде как Glade и GtkBuilder — разные сущности для одного и того же, и второе заменило первое? Или мне неправильно объяснили?

hobbit ★★★★★
()
Ответ на: комментарий от meliafaro

Дык...

Вот это да, смущает.

Тут всё просто. Тут надо помнить о том, что С++-биндинги это как правило обёртки над С-кодом, в случае с другими языками биндинги это тоже вызовы С-кода. Поэтому, если хочется минимализма в исходниках, то берите просто С и не волнуйтесь за всё остальное. Кстати, ещё всегда есть вопросы по качеству реализации биндингов. Всё ли реализовано и всё ли корректно работает. На мой взгляд, если уж GObject это по сути ООП в С (и наследование и полиморфизм там есть, просто выглядят они «странно»), то С++ там и так будет незачем.

Если нужен более-менее хороший туторил, то вот тут неплохой – https://github.com/RainMark/gtk3-tutorial чисто по элементам интерфейса и чисто на С. Т.е., без Glade.

GLib даже не для стандартной библиотеки цпп, там есть просто всё: работа с файлами и файловой системой на порядок круче, чем даже в Boost, треды, удобные контейнеры, смартпоинтеры, основной цикл, работа с XML, INI-конфигами, окружение, порождение процессов, нетворк, регулярные выражения, чексуммы, чего там только нет.

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

Moisha_Liberman ★★
()
Ответ на: комментарий от vertexua

Раньше и...

Раньше была и библиотека, но теперь ее заменили на GtkBuilder

Раньше можно было перегнать .ui в код на С. Теперь нет. По временам «к сожалению» нет.

Moisha_Liberman ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.