На примере обработчика глобальных горячих клавиш MacOSX
Иногда бывают случаи, когда необходимо добавить в программу платформо-зависимый код, и, если в Linux и Windows все стандартные заголовки являются C/C++ заголовками, то в среде MacOSX это Objective-C заголовки, и если их просто подключить в проект, вы получите тысячи и тысячи ошибок сборки, поэтому для MacOSX необходима возможность писать часть кода на Objective-C, и такая возможность есть.
Showing posts with label Qt. Show all posts
Showing posts with label Qt. Show all posts
03 October, 2013
07 March, 2013
Q_PROPERTY, Qt Designer, moc, uic, и нестандартно именованный setter
Вы когда нибудь-задумывались, что есть принципиальная разница используете ли вы стандартное именование сеттера для свойства (т. е. setter начинается с set и продолжается именем свойства с большой буквы) как например здесь:
В коде moc есть такой вот метод
До тех пор, пока вы не сделали плагин для Qt Designer для своего виджета - разницы никакой нет. Но она сразу повляется в обратном случае, дело в том, что дизайнер также генерирует несколько разный xml в ui-файле в случае, если свойство имеет нестандартно поименованный setter А именно к элементу property добавляется аттрибут stdset="0".
Теперь мы подошли к самому главному, почему это важно? А важно это потому что когда по ui-файлу пойдет uic, он обратит внимание на этот аттрибут и сгенерирует совершенно другой код.
Например, в случае стандартного setter'а код в методе setupUi(), будет выглядеть так:
Q_PROPERTY(int foo READ foo WRITE setFoo)И вариантом когда имя setter'a имеет произвольное написание? Ну например вот так:
Q_PROPERTY(int foo READ foo WRITE InitFoo)А различие есть!
В коде moc есть такой вот метод
bool stdCppSet() const { QByteArray s("set"); s += toupper(name[0]); s += name.mid(1); return (s == write); }Этот метод вызывается для каждого Q_PROPERTY и, если он возвращает false, то выставленный по умолчанию в true флаг StdCppSet сбрасывается и уже сброшенный записывается в метаинформацию.
До тех пор, пока вы не сделали плагин для Qt Designer для своего виджета - разницы никакой нет. Но она сразу повляется в обратном случае, дело в том, что дизайнер также генерирует несколько разный xml в ui-файле в случае, если свойство имеет нестандартно поименованный setter А именно к элементу property добавляется аттрибут stdset="0".
Теперь мы подошли к самому главному, почему это важно? А важно это потому что когда по ui-файлу пойдет uic, он обратит внимание на этот аттрибут и сгенерирует совершенно другой код.
Например, в случае стандартного setter'а код в методе setupUi(), будет выглядеть так:
widget->setFoo(10);А в случае нестандартного так:
widget->setProperty("foo", QVariant(10));А рассказывал я это все потому, что, если вдруг по каким-то причинам вам необходимо изменить в уже существующем коде стандартное имя setter'а на нестандартное, будьте внимательны и не забудьте обновить все ui-файлы, где это свойство использовано, иначе uic будет генерировать неверные файлы заголовков.
02 March, 2013
Qt Designer: Использование собственных виджетов в качестве Promoting Widgets
Продолжаем развлекаться с Qt Designer, на это раз мы поговорим про использование собственных виджетов в Promoting Widgets. Promoting Widgets позволяют использовать базовый класс для представления дочернего на форме, то есть если у вас есть какой-либо наследник скажем QLineEdit, но вы не хотите писать для него плагин (например потому что наследник не имеет никаких новых свойств, а просто имеет другой внешний вид), то вы можете просто в форме показанной слева, выбрать базовым классом QLineEdit а Promoted классом указать своего наследника.
Проблема, которую мы будем решать заключается в том, что нет [задокументированного] пути указать в качестве базового класса, свой виджет имеющий плагин для дизайнера.
Проблема, которую мы будем решать заключается в том, что нет [задокументированного] пути указать в качестве базового класса, свой виджет имеющий плагин для дизайнера.
31 January, 2013
Qt Designer плагин для виджета содержащего контейнер
Иногда, довольно таки не часто, но приходится создавать для своих виджетов плагины для Qt Designer. В Assistant отлично расписанно, как создать типовой плагин, мало того Qt Creator имеет отличный wizard, который выполняет большую часть работы. НО... Иногда (совсем редко) случается так, что нужно создать не совсем стандартный плагин. Ниже я буду рассказывать о случае, когда нужен плагин для виджета содержащего внутри себя контейнер, например QFrame или любой другой. Причем необходимо, чтобы этот вложенный контейнер оставался функционален в Qt Designer, и в нем можно было по прежнему размещать другие виджеты. О тонкостях ниже.
12 May, 2012
QWebView с прозрачным фоном поверх Phonon::VideoWidget
Передо мной встала задача добиться размещения виджета QWebView поверх работающего Phonon::VideoWidget, таким образом, чтобы background был прозрачен и выводимый на QWebView текст отображался непосредственно поверх видеоряда.
Ниже я расскажу, почему это проблематично сделать, и какой workaround я нашел.
Ниже я расскажу, почему это проблематично сделать, и какой workaround я нашел.
03 February, 2012
Presentation of MeeGo Harmattan Native Look TimePicker and DatePiker components

Few months ago I'm began to learn MeeGo Qt Components. I noticed many cool native components, which Nokia using in own application, not exists in Qt Components. I very like Nokia TimePicker component (you can see it, when you choose alarm time in clock application). I decided create own TimePicker component with same design and functionality. Yesterday, I finished DatePicker component too.
Components is a free and distributed under BSD Licence.
So, under cut, you find few words about using of this components, and link to repository.
20 December, 2011
03 November, 2011
Qt Developers Day 2011. Munich
На прошлой неделе я принимал участие в главном событии для людей занимающихся Qt Framework. Ниже небольшой рассказ об этом.
04 August, 2011
Пишем свой QR-Code генератор. Введение в QR-Code.
Введение.
Сейчас стало популярным использовать QR код для передачи информации в сети, например ссылки для мобильных устройств, а также данные контактов и прочее. Интернет наводнен различными генераторами кодов, мобайл маркеты наполнены программами для распознавания.
Вот и я решил немного разобраться в этом вопросе. Мне не интересен процесс распознавания, меня заинтересовало именно процесс создания QR кода.
Сейчас я нахожусь в стадии разработки Qt библиотеки для генерации QR кода. Если звезды не переменят своего положения, то данная библиотека увидит свет осенью.
Попутно постараюсь описывать здесь шаги которые нужно предпринять для данной работы. Однако, же как всегда, это не будет полным руководством или переводом документации, я не буду рассматривать здесь ВСЕ темы, только базовые вещи, которые нужно знать, чтобы понять как оно устроено.
Сейчас стало популярным использовать QR код для передачи информации в сети, например ссылки для мобильных устройств, а также данные контактов и прочее. Интернет наводнен различными генераторами кодов, мобайл маркеты наполнены программами для распознавания.
Вот и я решил немного разобраться в этом вопросе. Мне не интересен процесс распознавания, меня заинтересовало именно процесс создания QR кода.
Сейчас я нахожусь в стадии разработки Qt библиотеки для генерации QR кода. Если звезды не переменят своего положения, то данная библиотека увидит свет осенью.
Попутно постараюсь описывать здесь шаги которые нужно предпринять для данной работы. Однако, же как всегда, это не будет полным руководством или переводом документации, я не буду рассматривать здесь ВСЕ темы, только базовые вещи, которые нужно знать, чтобы понять как оно устроено.
28 July, 2011
30 April, 2011
QContact asynchronous API
Есть в Qt Mobility такая штука как QtContacts, эта библиотека позволяет работать с различными контактами и предоставляет доступ к адресной книге. Так вот если приглядется к документации, то самым очевидным путем получения нужного контакта по идентификатору будет конструкция:
QContactManager *manager = new QContactManager();
QContact contact = manager->contact(contactLocalId);
При таком способе получения контакта, на реальном устройстве вы получите большие временные задержки и конфликты приложений одновременно использующих адресную книгу.24 March, 2011
How to get MIME type on *nix system
If you work with media content, you will likely need to obtain MIME type of files on your hard disk (for example, if your app should be able to send email with attachment).
It's very simple.
13 March, 2011
Первая Российская MeeGo конференция
В период с 9 по 11 марта в Москве состоялась Первая Российская MeeGo конференция, которая также включала два дня тренингов. Первый день проводились тренинги для начинающих и я пропустил его, однако посетил второй день тренингов и собственно саму конференцию. Это уже второе мероприятие подобного формата проводимое Fruct'ом, участником которого я являюсь. О предыдущей конференции посвященной Maemo я писал в прошлом году на хабрахабре.
Итак, ниже обзор, фотографии и впечатления.
Итак, ниже обзор, фотографии и впечатления.
02 January, 2011
Интернационализируем приложение на Qt
Введение
Данная статья не претендует на уникальность, но простым языком объясняет как начать использовать возможности встроенной интернационализации в Qt приложениях.
10 November, 2010
Расстановка переносов
Потребовалось мне тут переносы автоматически расставить в русском тексте. Google сказал что самое лучшее это использовать алгоритм Ляна-Кнута. Однако, это хоть и совершенный, но достаточно сложный алгоритм, есть способ несколько проще, его я тоже нашел в сети, и решил описать и популяризовать в своем блоге.
05 November, 2010
Пощупаем Nokia N8
Так получилось, что я выиграл самый свежий на данный момент телефон от Nokia. Выиграл я его не просто так, а честным трудом, поучаствовав в конкурсе на лучший дизайн футболки для Qt Developer Days 2010. На самом деле призом должен быть стать билет на само мероприятие, но я не смог поехать. И Nokia подарила мне телефон.
Subscribe to:
Posts (Atom)







