Просмотр сообщений
|
Страниц: [1] 2 3 ... 188
|
1
|
Разное / Новости Qt сообщества / Re: Доступ к Qt
|
: Март 09, 2022, 19:56
|
И да, раньше была инфа, что можно установить оффициальную Qt через online installer просто включив VPN на этапе валидации адреса, а потом типа можно продолжать установку отключив его.. Но теперь это не канает т.к. заблокировали https://download.qt.io. Но возможно можно в MaintenanceTool вместо основного https://download.qt.io сконфигурить зеркала в качестве источников пакетов... Никто не пробовал? PS: Еще можно попробовать просто скачивать предкомпиленные 7z архивы с зеркал и распаковывать куда надо (хотя хз, может оно еще патчится).
|
|
|
5
|
Qt / Пользовательский интерфейс (GUI) / Re: Видео по сети
|
: Октябрь 26, 2021, 21:29
|
Плюсую за г-стример, там не особо сложно. Но там надо выбирать спецом кодеки, для которых есть аппаратная поддержка, чтобы не грузить ЦПУ (ЕМНИП - в Gst SDK только софтварные кодеки идут).
|
|
|
6
|
Qt / Вопросы новичков / Re: Проблема с получением данных с помощью QSerialPort::waitForReadyRead()
|
: Сентябрь 25, 2021, 16:05
|
Жаль что кутешники не выкинули эти блокирующие вызовы вообще из АПИ. Эти вызовы только все усложняют, как реализацию самих кутешных модулей, так и всего прочего. Проще все делается на сигналах/слотах, я не понимаю, в чем проблема вообще? 1. Методом QSP:::write() пиши данные (шли команды/запросы) 2. В обработчике Foo::onReadyRead() парси пришедшие данные/ответы. C++ (Qt) void Foo::sendDataRequest() { ... serial->write(request); ... } void Foo::sendStatusRequest() { ... serial->write(request); ... } void Foo::onReadyRead() { m_packet += serial->readAll(); // Проверяем пакет. Если приняли не полный пакет - выходим. if (notFullPackage()) return; // Если пакет - есть ответ данных, то шлем запрос статуса. if (packageIsData()) { sendStatusRequest(); return; } // Если пакет - есть ответ статуса, то делаем что-то еще. if (packageIsStatus()) { doSomething(); return; } } Foo::onStartTransaction() { sendDataRequest(); }
это в общих чертах. Что тут сложного то?
|
|
|
9
|
Qt / Вопросы новичков / Re: Подвисает GUI при удерживании мышкой окна
|
: Август 24, 2021, 17:25
|
Я не пользуюсь вендой, но насколько я помню, это не исправить и отдельным потоком.
Не, все исправляется потоком. Там суть была в том, что раньше QSP использовал QWinOverlappedIoNotifier (на базе Windows IOCP подсистемы), и тогда все было нормуль... Потом кутешники решили выкинуть этот приватный класс (типа им было влом его поддерживать) и перейти на alertable I/O (на основе {Read|Write}FileEx), на коллбеках. Я тоже перевел QSP на эти ф-ции. Но при этом да, начали блокироваться события при клике на заголовок окна или ресайзе окна. Там проблема в самом Qt event-loop, там шото накосячено и типа оно не может обрабатывать события от соседних фреймов/окон или как-то так. Там даже QTimer останавливался при кликах. И там один чувак (по моему Антон Кудрявцев, ЕМНИП) пытался все пофиксить Qt evenl loop, там было дохрена всяких патчей.. Чем закончилось не знаю, но вроде они подлечили другой класс QWinEventNotifier чтобы он не останавливался при кликах и типа убрали что-ли ограничение на максимальное кол-во хендлов у треда (было вроде 64). И теперь типо надо перевести QSP на этот QWinEventNotifier, но никто этим заниматься не спешит (т.к. я тоже больше не поддерживаю QSP). Так что вот так. в конструкторе mainwindow
Попробуй с чего нить простого. Например, просто выводи данные принимаемые QSP без всякой обработки и парсинга. И там не нужно два объекта в тред сувать. Если твой класс ComPort является враппером над QSP, то достаточно: 1. В QSP установить парентом ComPort в конструкторе 2. Достаточно мувнуть только один ComPort в тред С помощью Qtimer c частотой 10мс я обновляю виджеты.
Гы, а ты проверь шо и таймер не останавливается при кликах (раньше такое было)
|
|
|
11
|
Qt / Общие вопросы / Re: Проблемы с VCP в Windows
|
: Август 04, 2021, 21:05
|
Т.е. при использовании WinAPI таких траблов в маздае нет, а с QSerialPort есть. ((( Ну, как бы QSerialPort юзает то самое винапи... Сейчас оно юзает ReadFileEx/WriteFileEx ф-ции... Ты попробуй с ними, а также открой в overlapped режиме, чтоб честно было )) ЗЫ: Я больше не занимаюсь сериал портом, не сопровождаю его. Так что спрашивай у кутешников теперь к ним все претензии (они там вроде хотели кишки под винду подшаманить). Там наверно теперь кто-то из них должен тянуть этот модуль (ну, или выкинут его вообще)
|
|
|
12
|
Qt / Общие вопросы / Re: Проблемы с VCP в Windows
|
: Август 04, 2021, 11:13
|
Вендопроблемы. Из моего опыта, выдернутый ком порт остается "занятым" некоторое время (по крайней мере в течении минуты или как то так). Хотя, хз, многое зависит от драйвера. Как вариант - кикать "зависшее" у-во программно через WinAPI функции, но для этого нужны права админа... Но это дичь какая то.
|
|
|
14
|
Программирование / Алгоритмы / Re: Определить конечный угол вращения составного объекта
|
: Март 19, 2021, 16:18
|
Я даже картинки приататчил. И вот код (QML): import Qt3D.Core 2.0 import Qt3D.Extras 2.15 import Qt3D.Input 2.0 import Qt3D.Render 2.15 import QtQuick.Scene3D 2.0 Scene3D { focus: true aspects: ["input", "logic"] cameraAspectRatioMode: Scene3D.AutomaticAspectRatio property alias bigCubeRotationX: bigCuberansform.rotationX property alias bigCubeRotationZ: bigCuberansform.rotationZ property alias smallCubeRotationY: smallCuberansform.rotationY function calculateMatrix(bigMatrix, smallMatrix) { detector.setupObjectMatrix(bigMatrix, smallMatrix); } Entity { components: [ RenderSettings { activeFrameGraph: ForwardRenderer { camera: camera clearColor: "white" } }, InputSettings { } ] Camera { id: camera projectionType: CameraLens.PerspectiveProjection fieldOfView: 45 position: Qt.vector3d(0.0, 1, 3.0) upVector: Qt.vector3d(0.0, 1.0, 0.0) viewCenter: Qt.vector3d(0.0, 0.0, 0.0) } FirstPersonCameraController { camera: camera linearSpeed: 10.0 acceleration: 5.0 deceleration: 5.0 } Entity { components: [ PointLight {}, Transform { translation: camera.position } ] } Entity { components: [ CuboidMesh { xExtent: 1 yExtent: 0.2 zExtent: 0.5 }, Transform { id: bigCuberansform onMatrixChanged: calculateMatrix(bigCuberansform.matrix, smallCuberansform.matrix) }, PhongAlphaMaterial { alpha: 0.8 diffuse: "red" } ] Entity { components: [ CuboidMesh { xExtent: 0.5 yExtent: 0.1 zExtent: 0.2 }, Transform { id: smallCuberansform onMatrixChanged: calculateMatrix(bigCuberansform.matrix, smallCuberansform.matrix) }, PhongAlphaMaterial { alpha: 0.8 diffuse: "green" } ] } } } }
И CPP: C++ (Qt) void OrientationDetector::setupObjectMatrix(const QMatrix4x4 &matrix1, const QMatrix4x4 &matrix2) { QMatrix4x4 m = matrix1 * matrix2; QVector3D gravity(0, -1, 0); QVector3D v = m.mapVector(gravity); qDebug() << v; }
|
|
|
15
|
Программирование / Алгоритмы / Re: Определить конечный угол вращения составного объекта
|
: Март 19, 2021, 15:24
|
Если есть отношение parent-child, то матрица чайлда может уже и включать матрицу парента, К сожалению, не включает. Если нет, то просто перемножить матрицы. Да, спс, я попробовал так: C++ (Qt) QMatrix4x4 m = matrix1 * matrix2; QVector3D gravity(0, -1, 0); QVector3D v = m.mapVector(gravity); qDebug() << v;
но почему то это не работает в случае, если : 0. Начальная позиция - все ок, вектор гравитации вдоль оси Y - QVector3D(0, -1, 0) 1. Потом повернули большой куб вокруг оси X - на 90 град - все ок, теперь вектор гравитации вдоль оси Z - QVector3D(0, 0, -1) 2. Теперь вращаем малый куб вокруг оси Y - и результат не меняется, хотя теперь вектор гравитации должен распределяться между осями X и Z Может надо еще что-то делать с матрицами, а не только перемножать? Собсно это то за что и матюкают углы Эйлера (и хвалят кватернионы) И как их можно использовать? Есть мысли? т.к. у каждого объекта также есть свойство `rotation`, которое является кватернионом.
|
|
|
|
|