Ярлыки

вторник, 30 января 2018 г.

c++ лишние скобки при создании объекта

Ошибка: request for member `getStatus' in `test', which is of non-aggregate type `Bow ()()'

Решение: необходимо убрать скобки в Bow tst(); => Bow tst;

link

Qt Creator - включить profiler для QML.

Если при запуске профайлера появляется сообщение:
Could not connect to the in-process QML profiler.
Do you want to retry?

необходимо включить его поддержку.

Для включения профалера необходимо:
1. В левой панели Qt Creator выбрать вкладку Projects
2. Выбрать пункт Build.
    2.1. Развернуть элемент Build Steps.
    2.2. Включить галку Enable QML debugging.
3. Выбрать пункт Run.
    3.1. В разделе Debugger Settings вкючить галку Enable QML.
4. Для запуска профайлера, в верхнем меню Analyze/QML Profiler.

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

Qt/QML - создание файлов перевода

Для создания локализации приложения необходимо выполнить:

1. Создать файла перевода:
     lupdate file1.qml file2.qml -ts ru.ts
2. Редактировать ts файл:
    -удалить type="unfinished" в теге translation
    -написать перевод слова в тег translation
3. Создать бинарный файл из файла перевода:
    lrelease ru.ts
    должен появится файл ru.qm.
    Если у вас несколько ts файлов их можно обьединить в один:
        lconvert -i one.ts two.ts -o res.ts
4. Добавить в файл ресурса:
    <qresource prefix = "translations">
        <file>ru.qm</file>
    </qresource>
5. Загрузить в проект:
    QTranslator tran;
    tran.load(":translations/ru.qm");
    app.installTranslator(&tran);
Additional info here.

вторник, 23 января 2018 г.

Qt - масштабирование QQuickItem с сохранением позиции

При отрисовке QQuickItem мы переписываем updatePaintNode().
если необходимо смасштабировать обьект в ноде то применяем трансформационную ноду которую перемножаем на трансформационную матрицу.
для того, чтобы обьект остался на своем месте его необходимо сдвинуть в начало координат, а затем вернуть обратно.


QSGNode *quickItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
{
    QRectF bounds = boundingRect();
    QSGNode *n = static_cast(oldNode);
    if (!n) {
        n = new QSGNode();
    } else {
                QSGTransformNode *transformNode = new QSGTransformNode;
                QMatrix4x4 m;
                m.translate(bounds.width()/2, bounds.height()/2,0);
                m.scale(0.1);
                m.translate(-bounds.width()/2, -bounds.height()/2,0);
                transformNode->setMatrix(m);
                n->appendChildNode(transformNode);

    }
    return n;
}


Более подробно тут.

пятница, 12 января 2018 г.

QML - смешивание Qt Quick Controls 1.x и 2.x

Чтобы избежать конфликта имен можно импортировать разные версии библиотек как алиасы

import QtQuick.Controls 2.2 as QC2
import QtQuick.Controls 1.4 as QC1
Item{
    QC1.Button{
    }
    QC2.Button{
    }
}

Более подробно тут и тут.

вторник, 9 января 2018 г.

QML - Ворнинги QML Connections: Cannot assign to non-existent property

Если все работает, но ворнинги появляются при использовании Connections можно попробовать установить ignoreUnknownSignals: true внутри Connections

    Connections {
        ignoreUnknownSignals: true // нужно что-бы убрать ворнинг QML Connections: Cannot assign to non-existent property
        target: contactsTab
        onSigWidthIsNull : {
            hideScrollBar(isNull)
        }
    }

Более подробно тут.