О Qt-водстве…

May 10, 2012 16:28

Поработал тут немного с Qt5. Это именно тот Qt5 о котором столько говорили большевики. Для тех кого истерия на этот счёт обошла стороной поясняю: в Qt5 будет QtQuick и жабоскрипт во все поля, C++ заткнут в дальний угол и низведут до уровня языка для критических секций, сам фреймворк будет разрабатываться сообществом ну и прочий распад и разложение ( Read more... )

geek, житие, думы

Leave a comment

Comments 10

kalabro May 10 2012, 20:31:03 UTC
Более того, если воспользоваться C++11, то сигнал можно соединить и с анонимной функцией, что позволяет существенно разгрузить интерфейс класса от всякого сомнительного мусора.

а пример кода можно для «сторонних идиотов»?)

Reply

nikita_timofeev May 11 2012, 23:32:33 UTC
Ты будеш смеяться, но ЖЖ не пропускает комментарий. Видимо потому что слишком большой. Но молчит, зараза. О лимите на количество символов я видимо должен догадаться сам.

Reply

nikita_timofeev May 11 2012, 23:36:39 UTC
Можно. Что нужно знать о механизме сигнало-слотов:
1) Он предназначен для упрощения работы с петлёй событий;
2) Он позволяет по событию в одном объекте запускать некое действие в другом объекте;
3) Сигналы и слоты - особая улична магия Qt и к C++ не имеет никакого отношения. Для того чтобы они работали нужен специальный код генерируемый метообъектным компилятором.

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

В Qt4 возможны только соединения «сигнал-сигнал» и «сигнал-слот». По этому даже для того чтобы почесать нос по сигналу нужно определить слот (а слоты, могут быть только у Q_OBJECT'ов которые имеют довольно серьёзные ограничения не говоря уж о том, что каждому Q_OBJECT'у полагается интроспекция, которая нам как правило не нужна, а значит только усложняет программу).

В Qt5 с сигналом можно соединить любую функцию, даже анонимную. Наш «пример» будет выглядеть вот такПрватных слото больше нет, макроса Q_OBJECT в начале класса ( ... )

Reply


kalabro May 12 2012, 11:56:00 UTC
не так уж плохо. правда this я долго не могла уяснить

Reply

nikita_timofeev May 12 2012, 12:14:20 UTC
Ну это мой личный заскок. Мне кажется, явно указывать, что ты обращаеься к члену или функции класса - хорошо. Я и к статическим функциям класса обращаюсь явно, если ты не заметила. Или ты о чём-то другом?

Reply

kalabro May 12 2012, 12:25:43 UTC
так бы тоже работало?

[=]( bool ) { value++; }

Reply

nikita_timofeev May 12 2012, 13:03:15 UTC
Да (хотя синтаксис лямбд и замыканий в C++ на самом деле довольно мудрёный). Но так не вполне очевидно откуда взялся это value: то ли его в объявлени класса искать надо (это тут у меня и объявление и реализация в одном файле, а обычно такого не бывает никогда), то ли двумя строчками раньше.

Reply


Leave a comment

Up