Реклама
15 декабря 2017 г. 9:02

QMLQML - Урок 035. Использование перечислений в QML без C++

QML, enum, enumerations

Ну вот наконец-то и дождались!!! Появилась возможность объявлять перечисления (enum) сразу в QML без плясок с C++. Как добавлять свои перечисления в QML через C++ я описывал вот в этой статье . По факту здесь нет ничего сложного со стороны C++, просто нужно написать класс, наследованный от QObject, да зарегистрировать через Q_ENUM или Q_ENUMS ваше перечисление в этом классе, да зарегистрировать класс через qmlRegisterType.

Q_ENUM был добавлен в Qt 5.5 для замены Q_ENUMS , и он позволяет получить QMetaEnum во время компиляции с использованием QMetaEnum::fromType<T> . Такие перечисления теперь автоматически регистрируются как метатипы и могут быть преобразованы в строки в QVariant или напечатаны как строка с помощью qDebug().


Однако по моим наблюдениям при регистрации перечислений через Q_ENUM в файлах QML в Qt Creator не работает автодополнение кода для этих перечислений, тогда как при регистрации через Q_ENUMS всё работает.

Но теперь можно написать перечисление сразу в вашем пользовательском типе QML.

Например создадим вот такой тип объекта в QML.

MyText.qml

import QtQuick 2.10

Text {
    enum MyEnum {
        First = 10,
        Second
    }

    anchors.centerIn: parent
}
14 декабря 2017 г. 22:10

QtQt/C++ - Урок 074. Генерация псевдослучайных чисел, использование STD библиотеки random

Qt, C++11, Random, qrand, qsrand, QRandomGenerator

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

Qt предоставляет для генерации случайных числе функцию qrand , а также, начиная с Qt 5.10, класс QRandomGenerator.

Давайте разберём, как можно получить случайные значения в Qt, а также насколько они случайные.

qrand

Будем генерировать числа в диапазоне значений от и до. Для этого напишем две функции.

static int randomBetween(int low, int high)
{
    return (qrand() % ((high + 1) - low) + low);
}

static int randomBetween(int low, int high, int seed)
{
    qsrand(seed); // Установка базового числа для отсчёта рандома в qrand
    return (qrand() % ((high + 1) - low) + low);
}

Первая функция просто генерирует случайное значение от наименьшего числа до наибольшего. Тогда как во второй с помощью функции qsrand устанавливается базовое число, которое служит основанием для генератора псевдослучайных числе Qt, от которого и генерируется число. Таким базовым числом может быть системное время в миллисекундах.

14 декабря 2017 г. 8:12

QtВыпуск Qt 5.10

Releases, Qt5, Qt 5.10

Разработчики Qt анонсировали выпуск Qt 5.10, который ознаменован внесением нового функционала, а также выпуском Qt 3D Studio.

Qt 3D Studio

Как следует из названия, Qt 3D Studio представляет собой графический редактор, используемый для создания трехмерных пользовательских интерфейсов и создан из продукта NVIDIA Drive Design, который NVIDIA внесла в Qt в начале этого года.

Qt 3D Studio содержит runtime компонент, который запускается в вашем приложении, и графический инструмент для проектирования и создания пользовательского интерфейса. Хотя инструмент является автономным приложением, среда выполнения может быть легко интегрирована с остальной частью Qt.

Qt 3D Studio будет работать как с Qt 5.9, так и с 5.10. Runtime компонент и приложение 3D Studio доступны в рамках коммерческого лицензирования и лицензирования GPL.

5 декабря 2017 г. 8:47

QMLСкажи привет обработчику указателя Qt Quick

QML, Qt Quick

Нам известно, что на протяжении нескольких лет поддержка мульти-тач в Qt Quick была неадекватна во многих случаях её использования. У нас есть PinchArea , для обработки масштабирования, вращения и перетаскивания двумя пальцами; и MultiPointTouchArea , которая может использоваться для отображения какой-либо интерактивной обратной связи для точек касания, или, может быть, вы могли бы написать машину состояний в JavaScript, чтобы распознать какой-то жест. Что касается остальной части Qt Quick, то основными проблемами являются: 1) поддержка событий мыши; 2) Qt предполагает, что есть только одна мышь («основной указатель мыши»); 3) QMouseEvent и QTouchEvent (и еще несколько) не имеют подходящего промежуточного базового класса, поэтому они доставляются независимо друг от друга; 4), что было сложным на раннем этапе, чтобы рассматривать события касания как события мыши и доставлять их одинаково. Таким образом, результат заключается в том, что вы не можете взаимодействовать с двумя MouseAreas или Flickables одновременно, например. Также это означает, что вы не можете одновременно нажать две кнопки или перетащить два слайдера одновременно, если они реализованы с помощью MouseArea.

4 декабря 2017 г. 20:41

DjangoВыпуск Django 2.0

Django, Releases

Команда Django анонсировала выпуск Django 2.0

Этот выпуск начинается с использования в Django свободной формы семантического управления версиями, но нет существенных изменений в обратной совместимости (за исключением того, что был удалён Python 2.7), что было ожидаемым в выпуске 2.0. Обновление должно быть таким же, как и для предыдущих выпусков.

Примечания к выпуску

Совместимость с Python

Django 2.0 поддерживает следующие версии Python: 3.4, 3.5 и 3.6. Разработчики Django настоятельно рекомендуют именно эти версии и официально поддерживают только последнии версии данных версионных серий Python.

Django 1.11.x является последней версией, которая поддерживает Python 2.7

Django 2.0 станет последней версией с поддержкой Python 3.4. Если вы планируете развертывание Python 3.4 до конца срока службы для Django 2.0 (апрель 2019 года), то используйте Django 1.11 LTS (поддерживаемый до апреля 2020 года). Обратите внимание, однако, что конец поддержки Python 3.4 - конец марта 2019 года.

Поддержка третьесторонних библиотек для старых версий Django

После выпуска Django 2.0 Разработчики предлагают сторонним разработчикам приложений отказаться от поддержки всех версий Django до 1.11. В тоже время разработчики должны иметь возможность запускать тесты своего пакета с помощью python -Wd , чтобы отображались предупреждения об ошибках. После внесения исправлений для предупреждения об ошибке приложение должно быть совместимо с Django 2.0.

3 декабря 2017 г. 21:05

LinuxSNAP Урок 01. Что такое snap и простой пример сборки пакета

snap

Всем привет.

Давно уже планировал написать пару статей на тему сборки самодостаточных пакетов snap.

Если кто не в курсе, то технология snapcraft это сборка пакета на подобии *.deb или *.rpm . Но за небольшим отличием, snap пакет полностью самодостаточен. То есть ему от системы ничего вообще не нужно.  На данный момент пакеты snap поддерживают такие дистрибутивы как Arch , Debian, Fedora , Gentoo и само собою сам родоначальник данной технологии Ubuntu . Есть еще около 5-6 дистрибутивов которые поддерживают, но я их не проверял. На форумах пишут, что работает)).

В данной статье я немного опишу конфигурационный файл для сборки.

1 декабря 2017 г. 15:43

QtВыпуск Qt 3D Studio 1.0

Qt, 3D, Studio, Releases

Разработчики Qt анонсировали выпуск Qt 3D Studio 1.0 , которая предоставляет трёхмерную систему разработки пользовательского интерфейса, которая подходит как для разработчиков программного обеспечения, так и для графических дизайнеров.

Qt 3D Studio Editor

Qt 3D Studio - это инструмент для создания интерактивных 3D-презентаций и приложений. Редактор представляет собой кросс-платформенное приложение Qt, которое можно использовать в Windows, Mac и Linux. Вы можете импортировать дизайнерские активы из популярных инструментов разработки, таких как Photoshop, Autodesk Maya и The Foundry MODO.

Qt 3D Studio Editor & Viewer с функцией удаленного подключения

28 ноября 2017 г. 12:59

QtНаписание пользовательского Qt 3D аспекта - часть 1

Qt 3D, OpenGL, C++, Qt

Введение

Qt 3D имеет гибкую и расширяемую архитектуру, которая позволяет нам легко добавлять в нее свои новые функциональные возможности, не нарушая при этом существующие свойства. Функциональность Qt 3D разделена на так называемые аспекты, каждый из которых инкапсулирует конкретную предметную область, такую как рендеринг (Render Aspect), ввод (Input Aspect) или анимация (Animation Aspect).

В этой короткой серии статей вы познакомитесь с процессом добавления нового аспекта, который предоставляет типы компонентов и поведение для новой области, не охваченной Qt 3D из коробки. В этом примере мы решили реализовать аспект, который позволяет рассчитывать текущую среднюю частоту кадров. Конечно, это можно было бы добавить в средство визуализации, но это достаточно просто, чтобы быть хорошим примером для наших сегодняшних целей. Полный исходный код примера доступен для загрузки .

27 ноября 2017 г. 7:42

QMLQML - Урок 034. Передача структур данных из C++ слоя приложения в QML слой

QML, Qt, Meta, Q_INVOKABLE

Один из несомненных плюсов QML в Qt состоит в том, что он позволяет достаточно резко отделять backend-логику от интерфейса приложения. То есть весь backend мы пишем на C++, а в QML лишь отображаем необходимый результат.

При этом мы также можем и внутреннюю логику написать чисто на QML, минимизировав наличие C++ кода, или наоборот прописать дизайн некоторых элементов в C++, воспользовавшись возможностями OpenGL . Несмотря на разграничение QML и C++ частей кода на backend и frontend приложения, мы не имеем каких-либо больших ограничений.

Но иногда возникает необходимость передать некоторую структуру данных, которая будет нести несколько полей с информацией, в QML часть кода. Например такую структуру.

struct Structure 
{
    int m_number;
    QString m_message;
};

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

void sendToQml(int number, QString message);

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

24 ноября 2017 г. 11:08

QtQt 5.10 привносит новую Qt Virtual Keyboard 2.3

Qt, Qt 5.10, Virtual Keyboard

Виртуальная клавиатура Qt предоставляет вам интерфейс ввода и ссылку на клавиатуру для Qt 5 на Linux Desktop / X11, Windows Desktop и Boot2Qt - встраиваемые целевые платформы. В дополнение к виртуальной клавиатуре, модуль также предлагает универсальное распознавание рукописного ввода с поддержкой нескольких языков.

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

Некоторые интересные функции с предыдущих релизов:

  • Ввод слева направо и справа налево.
  • Интеллектуальный ввод текста с выбором слова.
  • Предварительный просмотр символа и альтернативный вид символа.
  • Автоматическая установка заглавных букв и вставка пробелов.
  • Масштабируемость к различным разрешениям.
  • Поддержка аппаратного ключа для двухсторонней и 5-позиционной навигации.
  • Звуковая обратная связь.
  • Поддержка рукописного ввода с жестами для полноэкранного ввода.
Реклама
  • JaJay
  • 17 декабря 2017 г. 5:16

C++ - Тест 002. Константы

  • Результат 58 баллов
  • Очки рейтинга -2
  • JaJay
  • 17 декабря 2017 г. 4:55

C++ - Тест 001. Первая программа и типы данных

  • Результат 93 баллов
  • Очки рейтинга 8
  • JaJay
  • 17 декабря 2017 г. 4:48

C++ - Тест 001. Первая программа и типы данных

  • Результат 66 баллов
  • Очки рейтинга -1
Последние комментарии
  • EVILEG
  • 7 декабря 2017 г. 9:47

Django - Урок 011. Добавление комментариев на сайт с Django

Визуальный пример чего? комментариев? При ответе на конкретный комментарий рядом с ником отвечающего будет стрелочка и указание ник другого пользователя. Который будет ссылкой на коммента...

  • Bernar
  • 7 декабря 2017 г. 9:24

Django - Урок 011. Добавление комментариев на сайт с Django

есть визуальный пример ?

  • EVILEG
  • 6 декабря 2017 г. 11:30

Django - Урок 011. Добавление комментариев на сайт с Django

Да, так будет даже лучше, я на сайте уже обновил до такого вида код Вот это уже не нужно if request.method == 'POST': Поскольку Вы и так используете метод post, то есть эта про...

  • Bernar
  • 6 декабря 2017 г. 11:19

Django - Урок 011. Добавление комментариев на сайт с Django

сделал немного по другому class EArticleView(View): template_name = 'knowledge/article.html' comment_form = CommentForm def get(self, request, *args, **kwargs): ...

Сейчас обсуждают на форуме
  • EVILEG
  • 16 декабря 2017 г. 17:23

Пауза в многопоточности

QFuture, который возвращается QtConcurrent::map имеет методы pause() и resume() и теоретически должен поддерживать этот функционал. Но для Qt...

  • Миша
  • 15 декабря 2017 г. 11:26

Как найти в QVector макс и мин

Спасибо

  • Galant
  • 14 декабря 2017 г. 19:58

LPT

Понял! Спасибо!

  • EVILEG
  • 14 декабря 2017 г. 13:38

QCustomPlot можно ли построить прерывистую линию на одном графике?

Во-первых: В pro файле проект по идее достаточно указать следующий define для включения возможности рендеринга через OpenGL DEFINES += QCUSTOMPLOT_USE_OPENGL И во вторых:...

  • EVILEG
  • 13 декабря 2017 г. 8:05

В многопоточности выполнять действие только в одном из потоков

Статическиe методs QThread::currentThread(); и QThread::currentThreadId() могут возвращать указатель на поток и его handle id соответственно. Можете попробовать через как...