четверг, 20 декабря 2012 г.

воскресенье, 2 декабря 2012 г.

Статическая сборка библиотеки QT под MS Visual studio

Я думаю никто не рвётся выпускать своё приложение с кипой библиотек... Чтобы приложение запускалось свободно на других машинах необходимо собрать библиотеку, а затем и само приложение. Ниже я опишу как это сделать.

воскресенье, 25 ноября 2012 г.

Qt Quick - несколько форм (окон в одном приложении)

В данном посте я расскажу о том, как добавить несколько форм в одно приложение. Речь пойдёт не о QWidget, а формах внутри одного окна. Для показательного примера мы создадим одно окно регистрации, и в случае ввода верного логина и пароля покажем скрытый текст.

среда, 14 ноября 2012 г.

Qt Creator не сохраняет измененную форму

Возможно вы уже встречались с этим багом как и я. На моей памяти это уже 10+ встреча, но до этого этот баг вскакивал под конец выполнения проекта, и я не особо заморачивался этой темой, простой открывал форму в Qt Designer и пересохранял ui_ файл. Сегодня же я решил добить эту проблему...

вторник, 6 ноября 2012 г.

Поддержка русского языка в приложениях на Qt

Одна из стандартных проблем, с которой встречается каждый разработчик из России, это поддержка русского языка в приложениях на Qt. По умолчанию русский текст выводится кракозябрами, и может потребоваться довольно много времени чтобы всё-таки разобраться как это устранить.

Создание меню на форме, QMenu

Для тех кто хочет добавить меню на форму, прошу сюда :)

пятница, 2 ноября 2012 г.

QML, создание кнопки Button

Для создания большинства приложений требуются стандартные элементы управления, такие как кнопки и поля ввода. И если с полями ввода в Desktop-приложениях в QML всё не так плохо, то кнопок просто напросто нет. Благо порядок создания кнопки довольно прост. Именно о кнопки и будет эта статья.

понедельник, 22 октября 2012 г.

Создание модели на базе QAbstractTableModel для QTableView, дополнение

Указанных в предыдущей статье описаний для хорошей жизни явно недостаточно. Довольно часто бывает необходимо задать заголовки столбцов, или сделать строки уникального (другого) цвета. Данные вопросы я и поведаю в данной статье.

воскресенье, 21 октября 2012 г.

Создание модели на базе QAbstractTableModel для QTableView

Существует множество способов вывести табличные данные. Один из таких способов (и на мой взгляд наиболее правильный) выводить данные в QTableView. Для данного виджета существует специальная модель данных QAbstractTableModel. На её базе мы и сделаем пример.

пятница, 19 октября 2012 г.

QML + JavaScript, начало


В связи с тем что в последние 2 месяца я активно трудился в дебрях библиотеки Sencha, то у меня появился некоторый опыт работы с JavaScript.
Исходя из полученных знаний я решил в очередной раз опробовать свои силы в кодах QML + JS, (в прошлый раз это был провал).

Создадим новое Qt Quick приложение:
Файл -> Новый файл или проект... -> Проект Qt Quick -> Интерфейс пользователя на Qt Quick.

В новом проекте сразу добавим js файлик.
Файл -> Новый файл или проект... -> QML -> Файл JS и обзовём его myjstest.js

Итак, первым делом в нашем QML коде для главного прямоугольника зададим id, а в MouseArea удалим выход по нажатию. После изменений код станет выглядеть следующим образом:
// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1
Rectangle {
    id: mainRec
    width: 360
    height: 360
    Text {
        anchors.centerIn: parent
        text: "Hello World"
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
        }
    }
}
Теперь в myjstest.js сделаем так, чтобы функция func() что-нибудь делала. Например будем менять у mainRec фоновый цвет. Тогда func() станет выглядеть так:
function func() {

    mainRec.color = "blue"

}

Ну и последним этапом подключим наш JS файл и вызовем нашу функцию:
// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1
import "myjstest.js" as JsTry // подключаем js файл
Rectangle {
    id: mainRec
    width: 360
    height: 360
    Text {
        anchors.centerIn: parent
        text: "Hello World"
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            JsTry.func() // вызываем написанную нами функцию
        }
    }
}


Обмен данными между формами

Почти всегда стоит задача создать более одной формы. И чаще всего эти формы должны обмениваться данными.
Для примера мы с вами создадим две формы. В первой будет поле ввода и кнопка. В поле ввода мы с вами будем вводить ФИО, а при нажатии на кнопку у нас будет открываться вторая форма, в которой ФИО вводится в 3-х полях, фамилия, имя и отчество. При этом из первой формы во вторую необходимо передать уже введённые данные, дабы не выводить пустую форму. А по нажатию кнопки "Ок" во второй форме передать введённые данные в первую форму.

среда, 17 октября 2012 г.

Чтение данных из файла через QFile

Это будет первый из нескольких способов чтения данных из файлов. Я постараюсь постепенно усложнять процесс чтения, но при этом будет повышаться эффективность для конкретных задач.

четверг, 4 октября 2012 г.

Сборка драйверов PostgreSQL для Qt под Windows с MinGW

В стандартной комплектации Qt SDK под Windows драйвера для работы с СУБД PostgreSQL отсутствуют. Есть несколько путей решения этой проблемы, равное количеству возможных компиляторов. Мы соберём всё это дело под MinGW, так как в этом случае нам не придётся слишком заморачиваться с вопросом версий и Service Packов, как для студийного компилятора.

среда, 30 мая 2012 г.

вторник, 29 мая 2012 г.

Qt + OpenGL встроенными методами

Рано или поздно каждый просто жаждет дорваться до рисования 3Д графики. Я не смогу вам описать тут все функции работы с OpenGL (да и не особо хочу), за этим вам гораздо лучше обратиться к другим источникам (например: NeHe Tutorials ). Но как нарисовать простую 3Д фигуру я вам здесь наглядно покажу. На выходе будет окошко, с вращающимся кубиком:


среда, 23 мая 2012 г.

QRegExp для работы с текстовыми данными. часть 1

По сути QRegExp переводится как Regular Expression, или по-русски - регулярное выражение. Суть данного выражения в том, что мы можем задав определенные правила, найти необходимую строку с некоторым содержанием, например, там необходимо извлечь номер телефона, который заключен в тэги <phone> и </phone>. Можно сделать задачу в лоб, и извлечь номер через find, но это слишком уж топорно.
Под катом чуть более подробное описание возможностей класса QRegExp.

пятница, 11 мая 2012 г.

Сборка OpenCV 2.4 с поддержкой Qt под Ubuntu (Linux)

Довольно стандартная для многих случаев задача, напишу её как для себя (если забуду), так и для тех кто в очередной раз с ней столкнется.

четверг, 10 мая 2012 г.

QtCups для Qt4

Не могу сказать что всё работает идеально... Собирал на коленке методом "авось", но утилита запускается, и вполне возможно работает...

понедельник, 7 мая 2012 г.

Перевод из Qt3 в Qt4

Подкинули мне подработку оживить древнюю софтину, написанную на Qt 3.3.8 .
Я конечно не долго думаю решил перевести её из Qt3 в Qt4.

четверг, 29 марта 2012 г.

Рисование QImage на форме


Рисование QImage на форме
(релиз Qt SDK на момент написания данной статьи - 1.2.0)



Очень часто стоит задача вывести какое-то изображение на форму, будь то график, фотография или ещё какая-нибудь хрень.
В C++ Builder всё было просто (ох и давно это было), добавил Picture и выбрал картинку... В Qt малость сложнее, но и возможности значительно шире.

воскресенье, 18 марта 2012 г.

Подключение к Qt базы данных от MS Access через ODBC

В QT по умолчанию есть следующие драйвера:


QDB2IBM DB2 (version 7.1 and above)
QIBASEBorland InterBase
QMYSQLMySQL
QOCIOracle Call Interface Driver
QODBCOpen Database Connectivity (ODBC) - Microsoft SQL Server and other ODBC-compliant databases
QPSQLPostgreSQL (versions 7.3 and above)
QSQLITE2SQLite version 2
QSQLITESQLite version 3
QSYMSQLSQLite version 3 for Symbian SQL Database
QTDSSybase Adaptive Server Note: obsolete from Qt 4.7

Если вы умеете писать драйвера к базам данных, эта статья не для вас...

воскресенье, 11 марта 2012 г.

Сборка Qt из исходников под linux (Ubuntu)

(Описание было написано для версии Qt 4.8.0, компилятор - gcc 4.3)

Существует такая задача - собрать библиотеки из Source файла. Здесь я вам приведу конкретный пример сборки.

суббота, 10 марта 2012 г.

QTcpSocket и QThread в одном флаконе, что надо сделать и чего не надо

Маленькая предыстория. Написали мы совтинку под Meego 1.2 Harmattan, и решили портировать её под Symbian. Немножко повозились с интерфейсом (повозился я, ибо я его и писал), вроде всё запускалось. Потом стало необходимо прилепить логику, но не тут то было. Стало появляется куча магических ошибок, среди них:
1. Зависание при попытке записи данных в сокет.
2. Поток завершился крахом: Thread 0xba2 has panicked. Category: QEventDispatcher; Reason: 0
Были ещё какие-то, но их я не сохранил. 
Ах, да, в эмуляторе была ещё одна ошибка: QSocketNotifier: socket notifiers cannot be enabled from another thread
Так как логику писал не я, а исправлять пришлось мне (ну вот так плохо получилось), я очень долго рыл всю эту штуку...

среда, 7 марта 2012 г.

Сборка Qt проекта с подключением к PostgreSQL в linux (Ubuntu)

(релиз Qt SDK на момент написания данной статьи - 1.2.0)

В отличие от windows версии Qt SDK, где изначально есть все необходимые драйверы баз данных, в версии для linux есть разве что драйвер QSQLLITE.
Список возможных драйверов вы можете просмотреть через QSqlDatabase::drivers().
Если я прав, подозреваю что вам нужна следующая статья:

четверг, 1 марта 2012 г.

среда, 22 февраля 2012 г.

Как работать с QPushButton и QLineEdit (для начинающих)

Как работать с QPushButton и QLineEdit


(релиз Qt SDK на момент написания данной статьи - 1.1.4)

Для всех начинающих святая тема это написание какой-нибудь фигни, которая умеет обработать текст (или числа), и как-то отреагировать на нажатие кнопки. В этой статье я опишу эти святые действия.

воскресенье, 19 февраля 2012 г.

четверг, 16 февраля 2012 г.

Открытый тренинг по QML

С февраля по май 2012 года Nokia и FRUCT проводят третий Российский тур бесплатных открытых тренингов по QML технологии. В программе тура организация серии трехдневных интенсивных тренингов в Москве, Санкт-Петербурге, Нижнем Новгороде, Петрозаводске и Таганроге. Приняв участие в предлагаемых тренингах, Вы получите необходимые знания и практические навыки по разработке приложений с использованием технологии QtQuick, и на практике познакомитесь с правилами и порядком регистрации приложений в Магазине Nokia. Тренинг является открытым и бесплатным, но для участия Вы должны пройти обязательную регистрацию на web странице соответствующего модуля тура (список страниц региональных тренингов приведен в конце страницы). Регистрация на тренинг закрывается по набору группы из 30 человек, но не позднее недели до начала тренинга. Количество мест ограничено, заявки будут рассматриваться в порядке их поступления.


Источник: http://www.developer.nokia.com/ru/News_and_events/QML-moskva.html

Перенос приложения с Meego Harmattan на Symbian

С Harmattan на Symbian
(релиз Qt SDK на момент написания данной статьи - 1.2.0)

Сейчас я развлекаюсь тем, что переношу приложение, написанное мною для Nokia N9 с Meego Harmattan на Nokia C6 с Symbian Anna. И, дабы вы не наступали на мои грабли и не ломали себе мозг, я вам расскажу несколько основных ошибок, да парочку изменений, который я внёс в проект.

суббота, 11 февраля 2012 г.

Портирование моделей данных из Qt в QML, Вариант 2

Портирование моделей данных из Qt в QML, Вариант 2
(релиз Qt SDK на момент написания данной статьи - 1.2.0)

Соединение QT и QML через сигналы и слоты в некотором роде удобно, но далеко не всегда. В этой статье я расскажу как можно модель, созданную в Qt, подключить к QML, и при необходимости менять из Qt.

Создание своей модели данных на основе QAbstractListModel

Создание своей модели данных на основе QAbstractListModel
(релиз Qt SDK на момент написания данной статьи - 1.2.0)

Предположим что вам необходимо разработать какую-то программу, которая в большинстве своём выводит списочные данные. Это может быть список загрузок, телефонная книга, аська и т. д.
В этой статье я вам расскажу как разработать свою модель данных, которую в другой статье мы сможем портировать в QML.

четверг, 2 февраля 2012 г.

Портирование моделей данных из Qt в QML, Вариант 1


Портирование моделей данных из Qt в QML, Вариант 1
(релиз Qt SDK на момент написания данной статьи - 1.2.0)


Основная проблема QML - отсутствие нормальной работы с динамическими данными (да, оно есть, но далеко не в таком виде, как хотелось бы).
В этой статье я расскажу два способа работы с моделями данных с тем раскладом, что данные вам необходимо портировать из Qt в QML.

среда, 1 февраля 2012 г.

Запуск и отладка приложений на телефоне с Symbian Anna

(релиз Qt SDK на момент написания данной статьи - 1.1.4)
Ещё недавно я писал приложения для Meego 1.2 Harmattan. Теперь мне это приложение необходимо портировать на Symbian Anna. 
Так как сходу этого сделать не удалось, а в справке необходимой информации по данной теме не оказалось, (как оказалось позже, она там есть, но найти её не так-то просто) пришлось немного повозиться.

вторник, 31 января 2012 г.

Qt Quick - простая анимация

Qt Quick - простая анимация
(релиз Qt SDK на момент написания данной статьи - 1.1.4)

В этой статье я вас покажу простой пример того, как на языке QML можно сделать анимированное передвижение объектов.

Qt Сигналы и слоты, что и как?

Главной особенностью библиотеки Qt является технология сигналов и слотов (Signals and slots). Не могу вам сказать что она чем-то значительно лучше других подходов, но мне эта штука нравится :)

понедельник, 30 января 2012 г.

Hello World! v4 - UI Edition


Hello World! UI Edition
(релиз Qt SDK на момент написания данной статьи - 1.1.4)


Ну и крайний вариант Hello World!, его сделают даже далекие от программирования люди. В этом примере я вам покажу простой пример работы с дизайнером форм (Qt Designer).

воскресенье, 29 января 2012 г.

Hello, World! v3 - Qt Quick edition


Hello World! Qt Quick Edition
(релиз Qt SDK на момент написания данной статьи - 1.1.4)

Прежде чем представить вам пример Hello world на QML (язык), думаю стоит рассказать вам немного о том, что такое Qt Quick и с чем его едят.
Если вы посмотрите на Microsoft Office 2000 и скажем на Microsoft Office 2010, то увидите разницу не только в разных форматах документов, но и огромную разницу во внешнем виде. В какой-то момент ИТ-индустрия стала уделять большое внимания не только функционалу, но и внешнему виду программного обеспечения. Qt Quick как раз и является инструментом для разработки "гламурненьких" интерфейсов. С его помощью можно легко внедрить в интерфейс все современные эффекты: перелистывание, плавное перемещение, изменение и т. д.
QML (Qt Meta-Object Language) - это декларативный язык программирования, основанный на JavaScript, предназначенный для дизайна приложений, делающих основной упор на пользовательский интерфейс. (www.wikipedia.org)
 Собственно на этом языке мы и будем делать интерфейс в Qt Quick. В нём нет указателей, ссылок, и в начале пути С-никам будет тяжко, но со временем вы поймёте всё его удобство и красоту.

суббота, 28 января 2012 г.

Hello, World!; v2 - QDebug edition

Hello World! QDebug Edition
(релиз Qt SDK на момент написания данной статьи - 1.1.4)
Данный пример покажет нам, как можно сделать консольный вывод в приложении. Как можно догадаться из названия, такой способ чаще всего применяется для отладки.

Стандарт обучения - Hello World! ; v1 - QLabel edition

Hello World! QLabel Edition
(релиз Qt SDK на момент написания данной статьи - 1.1.4)
Своё обучение программирование с применением Qt я начинал именно с этого примера.

понедельник, 23 января 2012 г.

Вводная информация о Qt

Вводная
(релиз Qt SDK на момент написания данной статьи - 1.1.4)
Этот блог рассчитан на тех людей, кто уже ознакомился с программированием на С/С++ и понимает разницу между структурой и классом.

Основное преимущество библиотеки Qt - кроссплатформенность. Qt поддерживает большое количество платформ (Linux, Windows и Mac однозначно). Написав приложение под ОС Windows, вы сможете его без каких либо изменений (не забываем про магию, когда всё-таки изменения вносить приходится) собрать этот же код под Linux'ом.
Другой описываемый плюс - технология сигналов/слотов. На мой взгляд это спорное "преимущество", но не отметить её нельзя.