Решил прикрутить.
Пока прикручивал, увидел, что после перехода на Qt 4.7 у нас что-то сломалось в тестах этого движка.
Копнул глубже -- нашел причину. Мужики решили, что функция QMetaObject::invokeMethod в случае некоторых видов ошибки должна дергать qWarning с детальным описанием того, из-за чего случился FAIL.
Плохая идея.
Это совершенно классический случай -- когда в коде есть проблема, ее вроде видят, но исправляют не ее, а начинают городить вокруг нее какие-то костыли и подпорки, вместо того, чтобы увидеть суть.
Функция QMetaObject::invokeMethod довольно сложная, и есть масса причин, по которым она может не сработать (она вызывает QMetaMethod::invoke, метод еще более сложный). При этом все, что пользователь узнает при выходе из функции -- bool, который говорит сработала функция или нет. И вместо того, чтобы добавить еще один параметр "std::string *pErrorDesc = 0" разработчики начинают в некоторых местах кода тыкать вызовы варнингов...
Ба-ра-ны!
А у нас тут еще с QtMultimedia под Windows масса проблем вылезла. Утечки памяти, причем причины некоторых из их хорошо видны в сырцах... В общем, нет в мире совершенства.
зы. Подумал о том, что значительную часть нашего проекта было бы полезно выложить в виде сырцов. Одна проблема, сама по себе среда исполнения тянет за собой очень много всяких побочных вещей, вроде логгирования, фрейворка для тестов, оберток для сокетов etc.
Чтобы все это по человечески выложить, оформить и хотя бы бегло задокументировать, надо угробить много времени, которого, увы, нет.
No comments:
Post a Comment