среда, 8 июля 2009 г.

SVG-иконки в QT-программах.

Теоретически это отличная идея - использовать векторные иконки. Внешний вид более не зависит от разрешения, при изменении масштаба глаза не начинают вытекать от пикселей. Ок, добавляем их в QT-ресурсы, компилируем и видим что ничего не работает. Иконок нет, как и сообщений об ошибках. В чём секрет?

Оказывается Qt с легкостью хватает любые форматы изображений без специального объявления кроме SVG. Для того чтобы QIcon понял что это, надо чтобы расширение svg было в имени. Лечение выглядит натуральным хаком - в alias ресурса надо добавить ".svg" и его-же в код грузящий иконки, Qt.QIcon(':/icon.svg').

Интересно только чем думают авторы?

понедельник, 15 июня 2009 г.

MySQL говно или как сделать DATETIME из DATE и TIME

Казалось бы делается это очевидно: DATETIME(date, time). Но нет, пидарасы, что создали MySQL, так не думают. Час в гугле вывел на работающий способ аналогичный удалению гланд через жопу. Нам надо собрать строку из date и time и эту строку преобразовать в datetime.

Узрейте свет ИСТИНЫ:

CAST(CONCAT(date, " ", time) AS DATETIME)

среда, 18 февраля 2009 г.

Python, subprocess и MPlayer

Какое-то время назад возникла проблема играть из программы звук в нечеловеческих форматах. Кроссплатформено. Сначала я хотел использовать существующие библиотеки (Audiere например), но в конце-концов решил использовать MPlayer в slave mode. Всё работает БОДРЯЧКОМ под Linux естественно. А под Windows?

А ситуация с Windows описывается словом "жопа". Научить MPlayer понимать команды я не смог (что-то с пайпами, лень возиться). К счастью бегать по одному треку или ставить на паузу не надо, процесс можно просто убивать. Просто хак с проверкой что мы под Windows и всё.

Новая проблема возникла далее - MPlayer просто не запускался. Если программа запускается из консоли или собирается с помощью py2exe как console - всё ОК, но как GUI не работает. Проблема оказалась снова в пайпах. Решение - при создании процесса с помощью subprocess.Popen задать все потоки (stdin, stdout, stderr), а не только нужные нам.

Но тут вылезла проблема номер 3. MPlayer выкидывал некрасивое пустое консольное окошечко поверх нашей Qt-морды. Решение было найдено в гугле минуты за 2 тут

В итоге всё даже работает. Осталось только поизучать исходники SMPlayer'а чтобы узнать как обойтись без хаков. А всё почему? Потому что Windows - говно.