© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
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-позиционной навигации.
  • Звуковая обратная связь.
  • Поддержка рукописного ввода с жестами для полноэкранного ввода.
24 ноября 2017 г. 8:27

QtА вы готовы к Qt Quick Controls 2.3?

Qt5, Qt Quick Controls, Dev Loop, ui, Qt 5.10

В выпуске Qt 5.10 будут доступны Qt Quick Controls 2.3.

Новый функционал в Qt Quick Controls 2.3:

  • Новые стили
  • Меню и действия (Actions)
  • Палитры
22 ноября 2017 г. 19:01

QtВыпуск Qt 5.9.3

Dev Loop, Qt, Releases

Разработчики Qt сообщили в своём блоге о выпуске Qt 5.9.3, который является патчем и не привносит ничего нового в плане функционала. Однако внимание в нём было сфокусировано на исправлении багов и улучшении производительности.

22 ноября 2017 г. 7:53

АлгоритмыАлгоритмы машинного обучения: Какой из них выбрать для решения вашей проблемы?

Машинное обучение, Machine Learning, ИИ, AI

Многие статьи об алгоритмах машинного обучения предоставляют отличные определения - но они не облегчают выбор алгоритма, который вам следует использовать. Прочтите эту статью!

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

В этой статье для Statsbot я постараюсь объяснить основные понятия и дать некоторую интуицию использования различных видов алгоритмов машинного обучения для различных задач. В конце статьи вы найдете структурированный обзор основных особенностей описываемых алгоритмов.

21 ноября 2017 г. 8:10

QtУлучшение использования ЦП в Qt 3D

OpenGL, Qt 3D

Много улучшений было внесено в Qt 3D с момента выпуска Qt 5.6, нашей предыдущей версии долгосрочной поддержки (LTS). Инженеры из KDAB и The Qt Company упорно работали, чтобы привнести новые функции в Qt 5.9 LTS, многие из которых перечислены в Что нового в Qt 3D с Qt 5,9 в посте блога Шон Хармера из KDAB. Несмотря на то, что множество возможностей еще в разработке (например, Vulkan backend), основное внимание в последних выпусках сместилось в сторону производительности и стабильности. Эффективность значительно улучшилась в сравнении с Qt 5.6, особенно для сложных сцен и сцен с большим количеством графов.

Сцены со многими окнами просмотра обычно приводят к большому количеству кадровых графов, поскольку каждое окно просмотра соответствует листовому узлу. Если вы не знакомы с концепцией кадрового графа в Qt 3D и с тем, насколько это мощно, вам следует прочесть сообщение из блога Пола Лемари на kdab.com . Ниже расположен снимок экрана одного из наших внутренних тестов; довольно простая (и красочная) сцена с 28 окнами просмотра:

10 ноября 2017 г. 7:43

DjangoDjango - Урок 028. Подключение возможности загружать изображения для пользователей без статуса персонала в CKEditor

Django, ckeditor

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

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

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

9 ноября 2017 г. 7:22

QtQt/C++ - Урок 073. Сигналы и слоты. Подключение слотов к перегруженным сигналам в рамках синтаксиса Qt5

Signal, Slot, Qt, Qt5

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

Возьмём тестовый класс, который имеет перегруженные сигналы.

#include <QObject>

class TestClass : public QObject
{
    Q_OBJECT
public:
    explicit TestClass(QObject *parent = nullptr);

signals:
    void testSignal(int arg1);
    void testSignal(int arg1, int arg2);
};

Здесь имеется сигнал, с перегрузкой сигнатуры. Подключаться данный сигнал также будет к слотам, которые объявлены в классе Widget , и которые также имеют перегрузку сигнатуры.

6 ноября 2017 г. 11:05

QMLQML - Урок 033. Подключение JavaScript файлов в других JavaScript файлах в Qt/QML проекте

QML, JavaScript, import

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

Например, вариант подключения JavaScript файла в QML файле

import "first.js" as FirstJs

Тогда, как подключение JavaScript файла в другом JavaScript файле будет отличаться лишь наличием точки перед этой строкой

.import "first.js" as FirstJs
1 ноября 2017 г. 6:40

QMLQML - Урок 032. Создаём Custom QuickItem из C++ с использованием средств OpenGL

QQuickItem, QQuickPaintedItem, QML, Qt, C++

В уроке 024 я показал пример создания кастомного объекта QML в С++ с помощью QQuickPaintedItem , который имеет метод paint() , а в этом методе paint можно отрисовывать как на графической сцене необходимые объекты с помощью объекта класса QPainter . Разработчики, которые активно работали с методами отрисовки у виджетов, а также с кастомизацией и делегатами в классических виджетах, не увидят ничего принципиально нового при использовании метода paint().

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

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

Предлагаю повторить пример из урока 024, чтобы увидеть разницу в коде и получить следующий результат.

21 мая 2018 г. 8:30
Nasty

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 10 баллов
  • Очки рейтинга -10
20 мая 2018 г. 12:26
Venic

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

  • Результат 58 баллов
  • Очки рейтинга -2
20 мая 2018 г. 12:16
Venic

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 90 баллов
  • Очки рейтинга 8
Последние комментарии
19 мая 2018 г. 12:44
EVILEG

Django - Snippet 001. get_object_or_none

А вы гарантируете, что метод first вернёт нужный объект, если в таблице две похожих записи? Этого никто не гарантирует. Может возникнуть неопределённое поведение приложения, если запись не так...
19 мая 2018 г. 12:34
Pavel

Django - Snippet 001. get_object_or_none

Согласен с тем что ваше решение более очевидно при чтении кода. first() же здесь применяется не совсем по назначению. А с последствиями "моего" решения не согласен. Метод вернёт только один об...
19 мая 2018 г. 12:27
EVILEG

Как я использовал FilterView заместо ListView для упрощения фильтрации

Может быть, а может и нет, все имеют различную речь.. не могу отвечать за всех пользователей ресурса.. поскольку каждый пользователь может дополнить материал ресурса статьями.
19 мая 2018 г. 12:25
EVILEG

Django - Snippet 001. get_object_or_none

В вашем случае происходит подмена сущностей. Вместо того, чтобы взять один конкретный объект, вы забираете queryset а потом берёте из него первый объект. Нехорошо будет, если queryset в каком-...
19 мая 2018 г. 11:11
Pavel

Django - Snippet 001. get_object_or_none

Тоже искал подобную функцию, чтобы не обрабатывать каждый раз исключения. И нашёл на so совет использовать вместо неё метод менеджера first(), который возвращает None при пустом queryset. Т.е ...
Сейчас обсуждают на форуме
21 мая 2018 г. 16:18
otvertka

Выводит мусор

Да, мыши. Т.е. мне надо создать класс-потомок от QPushButton, и там переопределить метод mousePressEvent? И как тогда у  Buttons поменять класс на созданный?
20 мая 2018 г. 2:05
vitaliy_antipov

Удаление серии из графика

Ой, извините, совсем запарился. Туплю: void MainWindow::onDelSeries(int i){ chartview->chart()->findChild<QLineSeries *>("obj" + QString::number(i))->deleteLater();...
18 мая 2018 г. 8:55
mak_trefa

Сборщик мусора и Connections в qml

можешь попробовать в деструкторе модели вызвать throw; и в дебагере посмотреть stacktrace
17 мая 2018 г. 20:30
EVILEG

Нарисовать дугу в QGraphicsItem

Добрый день! Оу, я смотрю по гитхабу, что вы уже разобрались с проблемой. Извиняюсь, заработался и забыл про ваш вопрос.
17 мая 2018 г. 15:34
Евгений_Канусовский@1981

Проблема с combobox

Спасибо за очередную помощь!

Рекомендуемые страницы