LINUX.ORG.RU

Qt, wxWidgets как правильно приготовить большой гуй?

 , ,


0

4

Я тыкаю палочкой пока только wxWidgets, но, в тред приглашаются и культи-ваторы, т.к. принцип должен быть одинаков.

Первый вопрос касается коммуникации между элементами гуя и данными. Например при каком-то событии/состоянии нужно задизаблить вот этот, этот и этот элемент выпадающего меню, а так же обновить вот то и вот то подменю вот такими титлами. Это простейший пример, может быть гораздо сложнее.

Я вижу два пути:

1) Сеттить все что нужно без событий. Для этого нужно написать кучу помогалок дергающих сеттеры. Где создавать эти помогалки дергающие кучку сеттеров? Одним классом и в нем методы? Это будет адъ и может быстро случиться зависимость «b» от «a» и a" от «b».

2) Коллбеки на события, по айди. Где объявлять эти коллбеки? В каждом элементе, который будет уметь меняться или в одном месте? Если в каждом, то хрен поймешь кто где лежит и за что отвечает, если в одном месте, то чем это отличается от первого варианта?

Наличие тредов склоняет ко второму варианту. Отработал — и только потом событие, а там сами разберутся кто куда. Это по крайней мере удобнее. Пока ты не подготовил данные, никто не рыпнется, мьютексы/семафоры не понадобятся(?).

Второй вопрос будет комплексным:

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

Что я там такое делаю? Да ничего не делаю кроме изучения. Ну нашел я туториалы, ну покопипастил куски кода, ну работает. Дальше что? Мне нужны истории успеха куда сложнее, чем пара кнопок в одном оконце. Смотреть сорцы приложений? Увольте. Там нихрена не понятно из-за огромного кол-ва «мусора», скрывающего архитектурные решения и совершенно без объяснения почему был сделан именно такой выбор архитектуры.

Кто-то скажет — если не знаешь что лепишь, то и не получится архитектуру набросать. Отчасти да. Но я не о самой архитектуре, а о выборе пути для построения правильной архитектуры и порядка в исходниках.

Можете просто рассказать о том как это все делается в виде: «я обычно кладу эти компоненты сюда, а те туда, а вот это делается вот так, потому что тут и тут позже иначе будет узкое место».

Ответ на: комментарий от CrossFire

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

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

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

Более традиционный способ с отрисовкой через QPainter описан в учебниках.

В QML с этим заморочек сильно меньше, там каждый файл по сути кастомный компонент.

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

Вот традиционный интересует. Да, я вчера (с другого компа) нашел где-то пару статей-мануалов, но там, блин аж про третью версию только. Да, QPainter во все поля. В принципе норм.

А вот еще вопрос чтоб два раза не вставать. Все компоненты, которые будут слотиться и сигналить должны быть видны друг другу и их нельзя вкладывать иерархически? Ну по крайней мере чтобы connect() сделать.

А если я сделаю один глобальный «слотоконнектор»? Всмысле указатель на виджет туда передам (каждый виджет сам себя добавит) и затем при присоединении обращаться к этому глобальному. Таким образом и иерархия будет и доступ будет. Или это бред? Или это не бред но делается иным способом?

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

Все компоненты, которые будут слотиться и сигналить должны быть видны друг другу и их нельзя вкладывать иерархически? Ну по крайней мере чтобы connect() сделать.

Нираспарсил, посмотри сигнатуру коннекта к слоту. У тебя должен быть инстанс объекта, грубо говоря.

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

Ну образно A->B->C и D->E->F и нужно Завязать F и B например:

QObject::connect(F, SIGNAL(foo()), B, SLOT(bar()));

Или я чот не догоняю?

deep-purple ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

Я этот кошмар на голых виджетах представлять отказываюсь.

Тем не менее IDA была переписана на Qt Widgets. А на скрине формочки Borland C++, скорее всего VCL-либа.

А на квике запросто такое пилится.

Но никто не пилит. Потому что квик сырой и тормозной.

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

Тем не менее IDA была переписана на Qt Widgets

И?

Но никто не пилит.

Пилят

Потому что квик сырой и тормозной.

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

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

И?

И от QtQuick они отказались.

Пилят

Пруф в виде подобного сложного десктопного приложения на QtQuick, которое я могу скачать и потыкать, можно?

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

И от QtQuick они отказались.

И?

Пруф в виде подобного сложного десктопного приложения на QtQuick, которое я могу скачать и потыкать, можно?

Что означает «подобное сложное», много табличек? Я таких не видел, хотя я и не особо интересуюсь на чем написано то или иное приложение.

ya-betmen ★★★★★
()
Ответ на: комментарий от deep-purple

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

Но рекомендую почитать https://wiki.qt.io/New_Signal_Slot_Syntax ибо у них там кое что существенно поменялось и добавилось удобства.

ya-betmen ★★★★★
()
Ответ на: комментарий от deep-purple

Вот традиционный интересует. Да, я вчера (с другого компа) нашел где-то пару статей-мануалов, но там, блин аж про третью версию только. Да, QPainter во все поля. В принципе норм.

Что мешает скачать какую-нибудь книжку по Qt5?

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