Re[11]: Кто как изучал Qt?
От: SaZ  
Дата: 05.10.15 07:14
Оценка:
Здравствуйте, _hum_, Вы писали:

__>и я уже выше говорил — нет, мне недостаточно этих данных, потому что я хочу размещать редактор своего делегата сам (в произвольном нужном мне месте таблицы), соответственно, должен знать, где располагается этот parent относительно изображения таблицы (дабы понять, где начало координат). а это, в свою очередь, зависит от того, кем является parent — если основным полем таблицы — одно, если фреймом — другое, если виджетом строки — третье, и т.п.


Тогда сами создавайте редактор в обработчике мышиных эвентов в делегате. Не завязывайтесь на createEditor.

SaZ>>Если же вам хочется узнать, что именно скрывается за этим парентом, то вам нужно взять этот парент и уже работать с ним. Это другой контекст, он не относится к методу createEditor. Он относится именно к классу QWidget : public QObject. Которые так же хорошо документированы.


__>а можно показать пример того, о чем вы говорите — можете найти в документации информацию о том, кем является этот парент (дабы ответить на вопрос, где расположено начало координат отрисовки эдитора относительно поля таблицы)?


Где расположено? — http://doc.qt.io/qt-5/qstyleoptionviewitem.html
Либо, если вы сами пишите делегат, то вы знаете, для какой вьюхи он используется. Я вообще всегда в конструктор делегата передаю указатель на вьюху. Потому что парент — не обязательно вьюха, а, как вы верно заметили, любой виджет.
Тогда, имея индекс — http://doc.qt.io/qt-5/qabstractitemview.html#visualRect
Отредактировано 05.10.2015 8:29 SaZ . Предыдущая версия .
Re[12]: Кто как изучал Qt?
От: _hum_ Беларусь  
Дата: 05.10.15 11:10
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Здравствуйте, _hum_, Вы писали:


__>>и я уже выше говорил — нет, мне недостаточно этих данных, потому что я хочу размещать редактор своего делегата сам (в произвольном нужном мне месте таблицы), соответственно, должен знать, где располагается этот parent относительно изображения таблицы (дабы понять, где начало координат). а это, в свою очередь, зависит от того, кем является parent — если основным полем таблицы — одно, если фреймом — другое, если виджетом строки — третье, и т.п.


SaZ>Тогда сами создавайте редактор в обработчике мышиных эвентов в делегате. Не завязывайтесь на createEditor.


зачем так сложно. можно же создать в createEditor, а потом просто в updateEditorGeometry перепозицонировать и перерисовать при необходимости. но речь, напоминаю, шла не о том, как сделать, а о том, что описание функции createEditor в документации qt корявое, сбивающее с толку.

SaZ>>>Если же вам хочется узнать, что именно скрывается за этим парентом, то вам нужно взять этот парент и уже работать с ним. Это другой контекст, он не относится к методу createEditor. Он относится именно к классу QWidget : public QObject. Которые так же хорошо документированы.


__>>а можно показать пример того, о чем вы говорите — можете найти в документации информацию о том, кем является этот парент (дабы ответить на вопрос, где расположено начало координат отрисовки эдитора относительно поля таблицы)?


SaZ>Где расположено? — http://doc.qt.io/qt-5/qstyleoptionviewitem.html


если вы про QStyleOptionViewItem::rect, то выше ж уже обсуждали: во-первых, в доке не написано, что именно в этом rect содержится ("This variable holds the area that should be used for various calculations and painting"), а во-вторых, даже если там координаты ячейки, то все равно нет информации о том, где в этой системе координат находятся границы таблицы (ведь, напоминаю, речь шла именно о том, что для отрисовки подсказки в моем примере мне нужно знать, где расположены границы таблицы) и без знания, кем является parent (основным виджетом таблицы или каким-то спец. виджетом), это выяснить в createEditor не представляется возможным. [это все к вопросу о том, почему дока по createEditor может вынудить читателя озадачиться вопросом, чем же на самом деле является parent]


SaZ>Либо, если вы сами пишите делегат, то вы знаете, для какой вьюхи он используется. Я вообще всегда в конструктор делегата передаю указатель на вьюху. Потому что парент — не обязательно вьюха, а, как вы верно заметили, любой виджет.


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

SaZ>Тогда, имея индекс — http://doc.qt.io/qt-5/qabstractitemview.html#visualRect

да, спасибо, эта функция удобнее, чем то, чем я пользовался — функциями типа columnViewportPosition.
Re[20]: Кто как изучал Qt?
От: _hum_ Беларусь  
Дата: 05.10.15 11:21
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Здравствуйте, _hum_, Вы писали:


__>>не, знания того, что это наследник QWidget недостаточно, потому как представление таблицы, гипотетически, может быть организовано сложным образом, например, каждая строка может быть представлена в виде отдельного виджета (а потому информация о том, где же границы таблицы, так и остаться неизвестными).


SaZ>Достаточно, если вы следуете концепции Qt MVC. Если же нет — то тогда вам нужно свою реализацию всего.


SaZ>Если же каждая строка в неком абстрактном вью будет представлена в виде виджета, то вам всё равно придёт парент в виде QWidget. Какой именно — неважно. Потому что в противном случае нарушается принцип полиморфизма. А Qt очень хорошо следует ООП и паттернам.


не, вы снова забываете про мой иллюстративный пример (Image: 2b87ad284cf2.png ), в котором важно знать границы таблицы, а для этого надо знать, на каком именно родителе рисуется ячейка (ведь именно он задает систему координат для ее отрисовки и определяет границы области видимости)
Re[7]: Кто как изучал Qt?
От: kov_serg Россия  
Дата: 06.10.15 06:50
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Здравствуйте, kov_serg, Вы писали:



_>>http://habrahabr.ru/post/194590/ ?

_>>...

SaZ>Позволю себе процитировать оттуда первый абзац:

SaZ>

SaZ>Если вы фрилансер или любите экспериментировать с экзотическими средами под С++, то стоит обратить внимание на экосистему Ultimate++...


SaZ>Захотелось людям поэкспериментировать — хорошо. Но для продакшн кода этому проекту врядли светит дорасти. И не только по техническим причинам.

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

SaZ>Как там с поддержкой кросс-платформенности / WinRT? Удобно ли добавлять новые API c выходом новых версий винды? Есть ли комьюнити / поддержка?

Работает на window / linux. Комьюнити есть, баги правятся. WinRT не целевая платформа так не является десктопной.
Что вы имеете ввиде под новыми API — DirectX12. Если оно вам надо вы будете юзать готовый движок.
Ultimate++ только на десктопах и серверах работает от i486 до Xeon, пускается даже под Win95 на самом убогом железе и не требует доп. библиотек.
Позволяет решать очень широкий круг задач, дешево и быстро.

SaZ>И вот таких вопросов можно задать вагон.

SaZ>Ответ на которые однозначно определяет кто есть кто.
Вот почему то эти вопросы никто не задаёт лидерам. Они продолжают гнуть свою линию и всех это устраивает.
К примеру java всё вроде отлично полный entrprise всё очень правильно и комьюнить, и поддержка, и фирма вроде серьёзная. Но системы работающие на java требют огромных ресурсов и частенько костылей в виде watchdog-ов т.к. начинаю по неизвестным причинам выедать всю имеющуюся память и люто тормозить. А рекомендации типа min 64Gb озу... Вобщем грусть и печаль.

SaZ>Ну не будут люди пересаживаться на самодельные мопеды с хорошо отлаженных автомобилей.

Так никто и не заставляет вас пересаживаться. Инструмент определяется задачами.
Главная задача программиста это не использование самой свежей студии, на самом топовом железе, и не создание приложений с самыи свежими api которые приводят к не совместимости с предыдущими системами на которых сидят основные массы. Главная задача выполнить поставленную задачу при фиксированном наборе ограничений.
Re[21]: Кто как изучал Qt?
От: SaZ  
Дата: 06.10.15 08:51
Оценка:
Здравствуйте, _hum_, Вы писали:

__>не, вы снова забываете про мой иллюстративный пример (Image: 2b87ad284cf2.png ), в котором важно знать границы таблицы, а для этого надо знать, на каком именно родителе рисуется ячейка (ведь именно он задает систему координат для ее отрисовки и определяет границы области видимости)


Я всё помню. Посвторюсь: если нужна эта инфа, то сохраняйте её в поле своего делегата.
Re[8]: Кто как изучал Qt?
От: SaZ  
Дата: 06.10.15 09:04
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Так и было поэкспериментировал. Пришел к выводу что для некоторых задач идеальный инструмент.


У меня сейчас сервер на Qt. Многие говорят, что извращение, но со своими задачами справляется идеально. И пул потоков есть, и веб реквесты, и json/xml/sql из коробки.

_>...WinRT не целевая платформа так не является десктопной.

Что? Тут всё с вами понятно

_>Что вы имеете ввиде под новыми API — DirectX12. Если оно вам надо вы будете юзать готовый движок.

Тогда отпадает смысл в U++. Под новыми апи я имею в виду тот же метро.

_>Ultimate++ только на десктопах и серверах работает от i486 до Xeon, пускается даже под Win95 на самом убогом железе и не требует доп. библиотек.

_>Позволяет решать очень широкий круг задач, дешево и быстро.

Этот круг значительно меньше, чем у Qt. При том, что читаемость кода ниже.

_>К примеру java всё вроде отлично полный entrprise всё очень правильно и комьюнить, и поддержка, и фирма вроде серьёзная. Но системы работающие на java требют огромных ресурсов и частенько костылей в виде watchdog-ов т.к. начинаю по неизвестным причинам выедать всю имеющуюся память и люто тормозить. А рекомендации типа min 64Gb озу... Вобщем грусть и печаль.


Ну так на джаве значительно ниже порог вхождения. Каждым инструментом надо уметь пользоваться. К примеру, многие веб-сервисы твиттера написаны на джаве. Есть балансировщик (на плюсах), который мониторит сервера. Как только java приложение понимает, что слишком много мусора, GC ест много времени, высокая фрагментация кучи и вообще, скоро всё ляжет, то приложение уведомляет балансировщик об этом. Балансировщик перестаёт отправлять запросы этому серверу. Сервер заканчивает обрабатывать все уже поступившие запросы и перезагружается. Далее оповещает балансировщик, что он снова готов к работе.

Понятно, что надо выбирать баланс между стоимостью разработки, стоимостью железа и желаемой производительностью. Так вот, в случае U++ всё печально, потому что стоимость разработки очень высокая (а именно — стоимость ответа разработчиков на нетривиальные вопросы).

_>Так никто и не заставляет вас пересаживаться. Инструмент определяется задачами.


Это в идеале. На практике, как правило, инструмент выбирается исходя из квалификации команды и предсказуемости поддержки/документирации/стабильности этого инструмента.
Вот когда портнут KDE на U++ — тогда можно будет сравнивать его с Qt. Пока же это бессмысленно.

_>Главная задача программиста это не использование самой свежей студии, на самом топовом железе, и не создание приложений с самыи свежими api которые приводят к не совместимости с предыдущими системами на которых сидят основные массы. Главная задача выполнить поставленную задачу при фиксированном наборе ограничений.


Вот именно. И в данном случае U++ — это ограничение. Qt прекрасно работает на многих embeded девайсах. А если уж совсем задр*****ть заморачиваться насчёт производительности, то откройте для себя boot-to-qt. Который стал возможен именно благодаря хорошо продуманной архитектуре Qt. А именно — чётких абстракций над различными платформами и железом. U++ до этого — как до луны.
Отредактировано 06.10.2015 9:06 SaZ . Предыдущая версия . Еще …
Отредактировано 06.10.2015 9:05 SaZ . Предыдущая версия .
Re[22]: Кто как изучал Qt?
От: _hum_ Беларусь  
Дата: 06.10.15 10:08
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Здравствуйте, _hum_, Вы писали:


__>>не, вы снова забываете про мой иллюстративный пример (Image: 2b87ad284cf2.png ), в котором важно знать границы таблицы, а для этого надо знать, на каком именно родителе рисуется ячейка (ведь именно он задает систему координат для ее отрисовки и определяет границы области видимости)


SaZ>Я всё помню. Посвторюсь: если нужна эта инфа, то сохраняйте её в поле своего делегата.


вы, видимо, не следите за контекстом беседы в данном случае речь шла о вашем утверждении:
информации о том, что parent является QWidget, достаточно для отрисовки эдитора

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


сорри, за дотошность
Re[2]: Кто как изучал Qt?
От: Submitter  
Дата: 12.10.15 06:30
Оценка:
Здравствуйте, DreamMaker, Вы писали:

МД>>После MFC + WinAPI, Qt просто мозг ломает капитально! Как изучать?


DM>надо просто C# изучить. и удовольствие получите, и работать приятнее будет и о членовредительских by design языках только в кошмарных снах вспоминать будете


Не понял сарказм про C#. Не могли бы объяснить подробнее?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.