Реклама
21 ноября 2017 г. 14: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 г. 13:43

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

Django, ckeditor

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

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

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

9 ноября 2017 г. 13: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 г. 17: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 г. 12:40

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

QQuickItem, QQuickPaintedItem, QML, Qt, C++

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

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

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

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

31 октября 2017 г. 14:27

QtQt - WinAPI. Как показать запущенное приложение поверх своего приложения

WinAPI, Qt, winId

Возникла у меня как-то задача управлять приложениями - сервисами, написанными на Qt, из приложения - ядра, написанного также на Qt. Причем, если приложение сервис не запущено, то оно должно запускаться, а если запущено, его окно должно выводиться на передний план. Для вызова приложений используется QProcess.

30 октября 2017 г. 12:36

LinuxСекреты написания хорошей документации

Документация

На предстоящей конференции APIStrat в Портленде Тейлор Барнетт изучит различные принципы проектирования документации и обсудит лучшие практики.

26 октября 2017 г. 17:57

QMLЗапуск приложений Qt в браузере благодаря использованию WebGL плагина

QML, Qt, WebGL, 3D

Интересная особенность пришла в Qt 5.10, это новый бэк-энд Qt, который использует WebGL для визуализации. Это позволяет приложениям Qt (с некоторыми ограничениями) работать в веб-браузере, который поддерживает WebGL.

Что это такое?

В новом бэк-энде используется WebGL, что означает Web Graphic Library . WebGL - это API JavaScript для визуализации 2D и 3D-графики в любом совместимом веб-браузере без использования плагинов. API похож на OpenGL ES 2.0 и может использоваться в элементах canvas HTML5.

Новый бэк-энд будет представлен как техническая функция предварительного просмотра в Qt 5.10.0 и включен в версии Alpha и Beta (на данный момент, Qt 5.10.0 является бета-версией на 1ом этапе разработки).

Последний исходный код также доступен в Qt git на http://code.qt.io/cgit/qt/qtwebglplugin.git/ .

Плагин распространяется либо по лицензии GPLv3, либо по коммерческим лицензиям. Обратите внимание, что он недоступен в LGPL. Одним из последствий лицензии GPL является то, что если вы ссылаетесь на нее (даже динамически), код вашего приложения попадает под GPL.

23 октября 2017 г. 13:22

QtБлокирующий последовательный порт. QSerialPort + QThread.

Qt, QSerialPort, QThread

Мне представилась задача написать ПО для управления излучателем рентгена. А именно: реализовать протокол передачи данных между ПК и излучателем рентгена и создать пользовательские функции "Установить параметры", "Включить рентген", "Выключить рентген".

Управление излучателем рентгена осуществляется благодаря передаче данных по последовательному порту, который еще называют COM-портом, но применимо это только в отношении ОС Windows.

Qt имеет класс QSerialPort, который предоставляет функции для доступа к последовательному порту.

Хочу продемонстрировать вам свою реализацию данной задачи.

22 октября 2017 г. 14:54

QtQt/C++ - Урок 072. Пример векторного редактора на Qt

QGraphicsItem, QGraphicsScene, QGraphicsView, Vector Editor, QGraphicsObject

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

А именно это был векторный редактор, который может:

  • Создавать прямоугольники
  • Изменять размер этих прямоугольников
  • Крутить прямоугольники вокруг центра
  • Делать заливку прямоугольников
  • Делать заливку прямоугольников градиентом
  • Изменять ширину абриса прямоугольника
  • Устанавливать цвет абриса прямоугольника
  • Создавать линии
  • Задавать ширину и цвет создаваемой линии
  • Делать ломанные линии из линий по двойному щелчку добавляя на линии точки излома
  • Выделять все графические объекты и перетаскивать их кучкой
  • Сохранять полученное изображение в SVG файл, а также восстанавливать все графические объекты из этого файла

На выполнение этого проекта в своё время (1,5 года назад) я потратил порядка 36 часов рабочего времени... сейчас на это ушло бы поменьше времени.

Реклама

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

  • Результат 50 баллов
  • Очки рейтинга -4

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

  • Результат 80 баллов
  • Очки рейтинга 4

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

  • Результат 6 баллов
  • Очки рейтинга -10
Последние комментарии

QML - Урок 002. Custom Button in QML Android

Нашел http://doc.qt.io/Qt-5/qtquickcontrols2-customize.html#customizing-button

QML - Урок 002. Custom Button in QML Android

А как кастомайзить Button если использовать QtQuick.Controls 2.0 ? В этом случае пишет Cannot assign to non-existent property "style"

  • EVILEG
  • 15 ноября 2017 г. 13:56

Qt/C++ - Урок 072. Пример векторного редактора на Qt

You need add common QWidget to form, after that you need right-click on this QWidget in the form and select "Promote to..." in Context Menu. After that You will see dialog. In dialog choose Ba...

  • cordsac
  • 15 ноября 2017 г. 3:33

Qt/C++ - Урок 072. Пример векторного редактора на Qt

Sir,In this form design how did you add verectanglesettings.ui,vepolylinesettings.ui UI's to this mainwindow.ui ? have any QT tool to add so. this image shows what I meaning.

Сейчас обсуждают на форуме
  • Docent
  • 21 ноября 2017 г. 19:39

Видео на сцене QGraphicsScene, как правильно сделать?

Ситуация такая: имеется область в памяти в которую пишутся кадры с камеры. Каким наиболее оптимальным образом отобразить их на сцене. У меня это реализовано таким образом, но подозреваю что мо...

Многопоточность. Ошибки при обращении к переменной

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

как отключить событие при открытии формы?

как обойти проблему: см. комментарий кода - может кто подскажет. TableView { id: table model: tableModel anchors.fill: parent focus: true Component.onComple...

  • EVILEG
  • 21 ноября 2017 г. 14:40

QGraphicsItem конструктор с параметрами

За что именно отвечают x_c , y_c ? Это положение объекта на графической сцене? Тогда лучше не в методе paint их применять, а через метод setPo...

  • EVILEG
  • 21 ноября 2017 г. 1:36

QGraphicsItem

Я так понимаю, вы каким-то образом передаёте указатель на отрисовываемый текст, то есть на QString. Но лучше добавить переменную в объявление класса, которая будет отвечать за текст, и п...