Anchor animation in QML

Some time ago I was looking for clear way to provide anchor animation in QML.
First of all,

AnchorAnimation can only be used in a Transition and in conjunction with an AnchorChange. It cannot be used in behaviors and other types of animations.

But I want to have some pattern-like way to provide all animations inside project.

Now, I want to share my results, hope someone find it usefull.

Here is picture of how I done all:
testingAnchorsAnimation

What I’ve done in few words:

  • Created fakeLeftItem and anchored it to left of my main view
  • Explicitly set fakeLeftItem‘s width and heigth (if that fakeLeftItem is only for leftPanel, we can set its size to leftPanel‘s size). fakeLeftItem must be invisible, but we must understand that it is outside our main view.
  • leftPanel anchored to the top and to the bottom of main.
  • Next moment is anchoring of left side of leftPanel. It can be anchored to leftFakeItem.left — so panel will be hide; and to the main.left — so panel will be visible.

To animate anchor changes, I added states into leftPanel:

states: [ State {
  name: "show"
  AnchorChanges { 
    target: leftPanel
    anchors.left: parent.left 
  }},
 State {
  name: "hide"
  AnchorChanges { 
    target: leftPanel
    anchors.left: fakeLeftPanel.left 
  }} ]

Add animation effect on anchor changes is quite simple:

transitions: Transition {
  AnchorAnimation { duration: 200 }
} 

Thats all. Here you can seee whole qml-file: http://pastebin.com/b1C7vTbQ.

[EN] Using scons with QtCreator (on Mixxx example)

Intro

Mixxx has everything you need to start making DJ mixes in a tight, integrated package.”

We’ll try to compile it and by the way, understand how to make QtCreator use scons build system instead of qmake. Why not use qmake? SCons is implemented as a Python script and set of modules, and SCons “configuration files” are actually executed as Python scripts. This gives SCons many powerful capabilities not found in other software build tools. Here is SCons vs other build tools.

Читати далі

[EN] Rendering DPI in Qt’s WebKit

250px-Compass_in_a_box.svg

Some time ago, I stuck on reading manuals trying to find correct and clear way to enlarge DPI of images rendered by WebKit (in Qt).

If you need to render HTML page in your Qt app, you can use widgets that use QTextDocument, such as QLabel and QTextEdit. But all of them support limited subset of HTML 4 and CSS 2.1 (Qt Project — Supported HTML Subset). But if you need to use some more complicated things (or even some typical CSS styles) excluded from that list, you should use WebKit (WebKit in Qt).

Читати далі

Компіляція Qt 4.8 під Лінукс

Вирішив трошки “get hands dirty”. Постійно використовую Qt та QtCreator як середовище для розробки як під Windows так і під Linux.

Цього разу вирішив зібрати бібліотеку Qt з вихідних кодів.

Читати далі

“Педантичні” ключі GCC

Статичний аналіз

Цікавився питаннями статичного аналізу програмного коду програм на С/С++.

Статичний аналіз програмного коду – аналіз коду програмного забезпечення, що відбувається без реального запуску програм, що досліджуються (інакше, такий аналіз називається динамічним).

Здоровий глузд і здорова логіка підказує “Якщо такі є, то чого б не використовувати доступні засоби не виходячи за межі середовища програмування?!”

Читати далі

HOWTO: Як скомпілювати динамічні бібліотеки MySQL для Qt 4.8

Параметри системи, на якій все відбувається:

  • Windows 7, x64
  • Qt 4.8.4
  • MinGW 4.4

За замовчуванням, в Qt драйвери для роботи з базою даних MySQL відсутні. Щоб переконатися в цьому можна виконати наступний код:

QStringList driverList;
driverList = QSqlDatabase::drivers();
if (!driverList.contains("QMYSQL", Qt::CaseInsensitive))
{
    qDebug() << "No QMYSQL support! Check all needed dll-files!";
} else {
    qDebug() << "QMYSQL support is avaiable.";
}

Для того, щоб зібрати необхідну для роботи бібліотеку, потрібно мати вихідні коди Qt та вихідні коди MySQL (при встановленні обох поставити галочки “Встановлювати вихідні коди”). Для Qt вихідні коди будуть знаходитися в каталозі ...\Qt\4.8.4\src\ (конкретно, нас цікавить підкаталог \src\plugins\sqldrivers\mysql\), а для MySQL те що нам потрібно — ...\MySQL\MySQL Server 5.5\include\. Ці шляхи шляхи в мене в системі були c:\Program Files (x86)\MySQL\MySQL Server 5.5\include\ (C:\PROGRA~2\MySQL\MYSQLS~1.5) та d:\Qt\4.8.4\src\plugins\sqldrivers\mysql\.

Для автоматизації збірки бібліотек, пропоную використати скрипт (.bat-файл):

set mysql=C:\PROGRA~2\MySQL\MYSQLS~1.5
cd d:\Qt\4.8.4\src\plugins\sqldrivers\mysql\
qmake "INCLUDEPATH+=%mysql%\include" "LIBS+=%mysql%\lib\libmysql.lib" 
-o Makefile mysql.pro "CONFIG+=release"
c:\MinGW\bin\mingw32-make.exe
pause

В якому c:\MinGW\bin\mingw32-make.exe — шлях до вашого mingw32-make.exe.

В результаті успішного виконання скрипта, в каталозі d:\Qt\4.8.4\src\plugins\sqldrivers\mysql\release\ з’явиться файл qsqlmysql4.dll.

Увага. Файл qsqlmysql4.dll (а також, за необхідності qsqlmysqld4.dll) та libmysql.dll (з каталогу MySQL\MySQL Server 5.5\lib\) потрібно скопіювати в папку з Qt — Qt\4.8.4\plugins\sqldrivers\ і надалі розповсюджувати з програмою, де використовується доступ до баз даних MySQL.