Показаны сообщения с ярлыком qt. Показать все сообщения
Показаны сообщения с ярлыком qt. Показать все сообщения
воскресенье, 4 июля 2010 г.
Qt widget для выбора цвета
Выкладываю простенький Qt widget для выбора цвета с дополнительной возможностью задать его строкой как в css. Этот widget я использовал в нескольких рабочих проектах, избавив меня от дублирования кода. Исходники (widget, designer plugin, example) можно взять здесь, а exe-шник здесь.
Ярлыки:
color picker,
qt,
widget
пятница, 29 января 2010 г.
QTranslator, который поддерживает TS-файлы
И снова Qt! Эта запись касается перевода приложений, написанных на Qt, на другие языки.
Стандартная схема выглядит следующим образом. У нас есть текстовый файл перевода в xml-формате, и он имеет расширение ".ts". Затем этот файл компилируется в двоичный формат при помощи утилиты lrelease, и в результате получаем файлик с расширением ".qm". Готовые файлы переводов могут располагаться как отдельно от исполняемого файла приложения, так и включены в него как ресурсы. Преимущества такого подхода, высокая скорость работы и малый размер файлов перевода. Но есть и другой аспект. Как вы переводите своё приложение? Знаете много языков? Нанимаете переводчиков? Переводите переводчиком? (кстати как вариант чернового перевода, к тому же многие выражения состоят из пары слов. У меня была идея и частичная реализация через Google Translate :)). Но есть ещё один вариант - перевод конечным пользователем! Эта возможность позволяет перевести приложение на множество языков без особых усилий! Например, один из проектов, над которым я работаю, переведён уже на 27 языков. Поэтому файлы переводов распространяются в текстовом виде, а проще всего прямо в ts-формате. Для его чтения был написан небольшой класс TSTranslator. Для удаления "лишнего" из ts-файлов, например, номеров строк и имён исходных файлов, можно воспользоваться утилитой lconvert с параметром --no-ui-lines или --drop-tags. Япользуюсь самописной утилиткой stripts. К сожалению, текущая реализация пока не поддерживает множественные формы числительных. Буду рад замечаниям и дополнениям.
tstranslator_src.zip
Стандартная схема выглядит следующим образом. У нас есть текстовый файл перевода в xml-формате, и он имеет расширение ".ts". Затем этот файл компилируется в двоичный формат при помощи утилиты lrelease, и в результате получаем файлик с расширением ".qm". Готовые файлы переводов могут располагаться как отдельно от исполняемого файла приложения, так и включены в него как ресурсы. Преимущества такого подхода, высокая скорость работы и малый размер файлов перевода. Но есть и другой аспект. Как вы переводите своё приложение? Знаете много языков? Нанимаете переводчиков? Переводите переводчиком? (кстати как вариант чернового перевода, к тому же многие выражения состоят из пары слов. У меня была идея и частичная реализация через Google Translate :)). Но есть ещё один вариант - перевод конечным пользователем! Эта возможность позволяет перевести приложение на множество языков без особых усилий! Например, один из проектов, над которым я работаю, переведён уже на 27 языков. Поэтому файлы переводов распространяются в текстовом виде, а проще всего прямо в ts-формате. Для его чтения был написан небольшой класс TSTranslator. Для удаления "лишнего" из ts-файлов, например, номеров строк и имён исходных файлов, можно воспользоваться утилитой lconvert с параметром --no-ui-lines или --drop-tags. Я
tstranslator_src.zip
Ярлыки:
qt,
qtranslator,
ts
понедельник, 14 декабря 2009 г.
Qt & Windows 7 Taskbar
Всё мы знаем или по крайней мере наслышаны о нововведениях в пользовательском интерфейсе Windows 7. А конкретно о новом task bar. Ну а если ещё нет, то поиск Вам поможет :) Семёрку смотрел ещё, когда она была бетой, и она мне сразу понравилась.
В последнее время я занимаюсь разработкой программ с использованием библиотеки Qt, в частности и под Windows платформу. Естественно мне захотелось использовать новые возможности Windows 7, а именно возможность отображения прогресса прямо в task bar'е. Библиотека Qt не содержит средств для этого, а поиск готовых решений не дал результатов (может плохо искал? :)).Поэтому я решил сделать это сам.
Многие новые возможности task bar'а доступны через интерфейс ITaskbarList3 (ITaskBarList4). Данный интерфейс можно использовать после того, как окном будет получено пользовательское сообщение "TaskbarButtonCreated", которое означает, что на панели задач была размещена кнопка для данного окна. Всё это дело я решил оформить в виде класса, который можно было бы легко подключать и использовать в готовых приложениях. Единственной проблемой стал отлов сообщения "TaskbarButtonCreated". Сначала я хотел использовать eventFilter и installEventFilter, но как оказалось eventFilter обрабатывает только сообщения определённые в QEvent. Другим вариантом было использование метода QCoreApplication::setEventFilter, но здесь не всё гладко. А вдруг наше приложение тоже использует setEventFilter для установки своего обработчика? Тогда надо проследить последовательность установки-восстановления обработчиков, чтобы избежать возникновения ошибок. И наконец я пришёл к варианту создания невидимого окна и использования метода winEvent для получения сообщения. В итоге получился класс QTaskbarList3 оформленный в виде singleton.
В качестве примера написал небольшую программку, которая создаёт дочерние окна с progress bar и возможностью его управления (QtWin7_src.zip, QtWin7_exe.zip).
В последнее время я занимаюсь разработкой программ с использованием библиотеки Qt, в частности и под Windows платформу. Естественно мне захотелось использовать новые возможности Windows 7, а именно возможность отображения прогресса прямо в task bar'е. Библиотека Qt не содержит средств для этого, а поиск готовых решений не дал результатов (может плохо искал? :)).Поэтому я решил сделать это сам.
Многие новые возможности task bar'а доступны через интерфейс ITaskbarList3 (ITaskBarList4). Данный интерфейс можно использовать после того, как окном будет получено пользовательское сообщение "TaskbarButtonCreated", которое означает, что на панели задач была размещена кнопка для данного окна. Всё это дело я решил оформить в виде класса, который можно было бы легко подключать и использовать в готовых приложениях. Единственной проблемой стал отлов сообщения "TaskbarButtonCreated". Сначала я хотел использовать eventFilter и installEventFilter, но как оказалось eventFilter обрабатывает только сообщения определённые в QEvent. Другим вариантом было использование метода QCoreApplication::setEventFilter, но здесь не всё гладко. А вдруг наше приложение тоже использует setEventFilter для установки своего обработчика? Тогда надо проследить последовательность установки-восстановления обработчиков, чтобы избежать возникновения ошибок. И наконец я пришёл к варианту создания невидимого окна и использования метода winEvent для получения сообщения. В итоге получился класс QTaskbarList3 оформленный в виде singleton.
В качестве примера написал небольшую программку, которая создаёт дочерние окна с progress bar и возможностью его управления (QtWin7_src.zip, QtWin7_exe.zip).
Подписаться на:
Сообщения (Atom)