Showing posts with label Qt. Show all posts
Showing posts with label Qt. Show all posts

03 October, 2013

Пишем Objective-C код прямо в Qt проекте, не выходя из Qt Creator

На примере обработчика глобальных горячих клавиш MacOSX

Иногда бывают случаи, когда необходимо добавить в программу платформо-зависимый код, и, если в Linux и Windows все стандартные заголовки являются C/C++ заголовками, то в среде MacOSX это Objective-C заголовки, и если их просто подключить в проект, вы получите тысячи и тысячи ошибок сборки, поэтому для MacOSX необходима возможность писать часть кода на Objective-C,  и такая возможность есть.

07 March, 2013

Q_PROPERTY, Qt Designer, moc, uic, и нестандартно именованный setter

Вы когда нибудь-задумывались, что есть принципиальная разница используете ли вы стандартное именование сеттера для свойства (т. е. setter начинается с set и продолжается именем свойства с большой буквы) как например здесь:
    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 я нашел.

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.

03 November, 2011

Qt Developers Day 2011. Munich

На прошлой неделе я принимал участие в главном событии для людей занимающихся Qt Framework. Ниже небольшой рассказ об этом.

04 August, 2011

Пишем свой QR-Code генератор. Введение в QR-Code.

Введение.
Сейчас стало популярным использовать QR код для передачи информации в сети, например ссылки для мобильных устройств, а также данные контактов и прочее. Интернет наводнен различными генераторами кодов, мобайл маркеты наполнены программами для распознавания.
Вот и я решил немного разобраться в этом вопросе. Мне не интересен процесс распознавания, меня заинтересовало именно процесс создания QR кода.
Сейчас я нахожусь в стадии разработки Qt библиотеки для генерации QR кода. Если звезды не переменят своего положения, то данная библиотека увидит свет осенью.
Попутно постараюсь описывать здесь шаги которые нужно предпринять для данной работы. Однако, же как всегда, это не будет полным руководством или переводом документации, я не буду рассматривать здесь ВСЕ темы, только базовые вещи, которые нужно знать, чтобы понять как оно устроено.

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 подарила мне телефон.