← All posts tagged Qt5

Вообще говоря Qt5 и C++11 позволяют писать графические приложения сложнее hello world без наследования, объявления классов и вообще целиком в функции main. Это… хорошо.

Ни что так не расстраивало меня в работе с qt как необходимость использовать строковые представления сигналов и слотов при их соединение. Во-первых это упадничество и деградации. Во-вторых результат подобного соединения можно было проверить только во время исполнения. К счастью наступил qt5 и теперь для тех же целей можно использовать указатели на члены-функции. Это гораздо удобнее для автодополнятора и позволяет проводить некоторые простые проверки соединения ещё во время компиляции. Однако счастье моё омрачал тот факт, что почти все сущности в qt так или иначе взаимодействовавшие с сигналами и слотами кроме функций соединения и разъединения всё ещё используют старую модель. Но я не отчаялся, нашёл QMetaMethod::fromSignal, вспомнил про type_traits и static_assert и изобразил примерно такой костыль gist.github.com Теперь для создания QSignalTransition можно использовать указатель на сигнал, аргументы которого (не побоюсь этого сказать) будут выведены сами (что спасает нас от ряда обидных ошибок), да и сама принадлежность сигнала к классу-отправителю тоже будет проверена. Тут стоит упомянуть одно но: я не смог придумать как отличить во время компиляции сигнал от любой другой функции-члена. Устав воевать я полез смотреть как это сделано в qt5 и с удивлением обнаружил что там это тоже не сделано.

После нового механизма сигнало-слотов на указателях, вылезающие то тут, то там куски старого варианта на строках вызывают бурю эмоций вплоть до разрыва определённых тканей организма. Особливо в этом примечателен QState, который умеет прыгать из состояния в состояние по сигналу (причём практически только по сигналу) при этом начисто игнорируя то значение с которым этот сигнал пришёл. В общем кровь, кишки, вспоротые вены, давайте обмазываться костылями либо в виде лишних сигналов, либо в виде промежуточных состояний…

Какая-то странная ерунда. Дёргаю инстанс QApplication, из него текущий QStyle, из него standardIcon. Всё работает. Делаю тоже самое из плагина — кровь, кишки, symbol lookup error, undefined symbol: _ZNK6QStyle12standardIconENS_14StandardPixmapEPK12QStyleOptionPK7QWidget. Погрешил на особую синглетоновую магию. Так нет же, из плогина прекрасно виден QApplication и вызов QStyle тоже прекрасно прокатывает. Чёрная магия какая-то.