
BlinCTМамыр 10, 2017, 1:20 Т.Қ.
Управление размерами и перемещениями 2 qml элементами из C++
Всем привет. пытаюсь сейчас решить проблему как управлять 2 элементами по отношению друг к другу. То есть размеры и пересечения если один попал внутрь другого. Первое чтобы я хотел кинуть это код С++ где есть реализация данных для перемещения обьекта Конструктор имеет в себе только таймер
connect(&m_oTimer, &QTimer::timeout, [this]() { m_LastCopTarget = GetMeasuring(); }); m_oTimer.start(50);Дальше идем к функции для получения новой точки для перемещения
void TherapyStability::NewPointsAvaliable(QList<QPointF> &arrPoints, QList<QPointF> &arrForces, QList<QPointF> &arrAngles) { Q_UNUSED(arrPoints); Q_UNUSED(arrForces); Q_UNUSED(arrAngles); QSharedPointer<Message095_Data> oMessage095_Data(new Message095_Data()); QVariantMap arrData; switch (static_cast<Step>(GetState())) { case Step::Settings: break; case Step::StabilityTest: oMessage095_Data.data()->SetType(Message095_Data::MessageType::TherapyData); arrData.insert("last_point", arrPoints.last()); arrData.insert("cop_target", m_LastCopTarget); if (m_bInCalculation) { ++m_nCopCount; if (std::sqrt(std::pow(std::abs(arrPoints.last().x() - m_LastCopTarget.x()),2) + std::pow(std::abs(arrPoints.last().y() - m_LastCopTarget.y()),2)) <= m_nSize) { ++m_nCopHitCount; m_bCopInTarget = true; qDebug("COP:%f,%f TAG:%f,%f", m_LastCopTarget.x(), m_LastCopTarget.y(), arrPoints.last().x(), arrPoints.last().y()); } else { m_bCopInTarget = false; } } } }Тут функции которые генерируют рандомные числа для перемещения объекта(вдруг что то не так сделано)
float getRandomNumber(float min, float max) { return static_cast<float>(qrand() % (int)((max - min) * 100)) * 0.01f + min; } QPointF TherapyStability::GetMeasuring() { static float angle = getRandomNumber(0.f, 2.f * M_PI); static QPointF oldPoint(0.f, 0.f); return GetNextPoint(angle, oldPoint); } QPointF TherapyStability::GetNextPoint(float &angle, QPointF &oldPoint) const { const float halfRangeX = m_nRangeOfMovement/2;// 150.f; const float halfRangeY = m_nRangeOfMovement/3;// 100.f; const float timerInterval = 0.02f; const float angleCoeff = 30.f; angle += getRandomNumber(-angleCoeff * timerInterval, angleCoeff * timerInterval); float cop_x = oldPoint.x(); float cop_y = oldPoint.y(); cop_x += m_nSpeed * qCos(angle); cop_y += m_nSpeed * qSin(angle); if (cop_y < -halfRangeY || cop_y > halfRangeY) angle = -angle; if (cop_x < (-halfRangeX ) || cop_x > halfRangeX) angle = -angle + M_PI; cop_x = qBound(-halfRangeX, cop_x, halfRangeX); cop_y = qBound(-halfRangeY, cop_y, halfRangeY); oldPoint = QPointF(cop_x, cop_y); return oldPoint; }ну и теперь самое главное, qml объекты и их перемещение
function onDataReceived(value) { copPosition.x = deskCOP.width / 2 + value.last_point.x * deskCOP.ratio_desk copPosition.y = deskCOP.height / 2 - value.last_point.y * deskCOP.ratio_desk copTarget.x = deskCOP.width / 2 + value.cop_target.x * deskCOP.ratio_desk copTarget.y = deskCOP.height / 2 - value.cop_target.y * deskCOP.ratio_desk } Item { id: deskCOP anchors.centerIn: desk width: desk.width height: width property real ratio_desk: desk.height / 1000 // 1000mm = velikost desky v dalsim rozmeru Image { id: copTarget Component.onCompleted: { console.log("height = " + height) _networkCommunicator.getParamValue("size_slider") } width: height source: "/images/therapies/stability/target_green.svg" fillMode: Image.PreserveAspectFit } Image { id: copPosition height: 80 * deskCOP.ratio_desk width: height source: "/images/therapies/stability/CoP.svg" fillMode: Image.PreserveAspectFit } }
Проблема в том что они даже не пересекаясь выдают в логах что они пересеклись. Вот так выглядит лог из консоли, по данными видно что элементы далеки друг от друга но при этом попадание одного в другой почти постоянное.
[ 20:275 ] extern;COP:-57.148273,0.491539 TAG:-19.700001,43.400002 [ 20:326 ] extern;COP:-50.624756,-5.708760 TAG:-24.900000,36.900002 [ 20:375 ] extern;COP:-46.382809,-13.646384 TAG:-42.100002,26.000000 [ 20:431 ] extern;COP:-45.298290,-22.580803 TAG:-53.700001,30.100000 [ 21:026 ] extern;COP:39.836624,-38.805084 TAG:55.299999,5.500000 [ 21:075 ] extern;COP:47.646992,-34.333157 TAG:48.600002,1.800000 [ 21:125 ] extern;COP:56.646542,-34.243149 TAG:33.200001,0.800000 [ 21:525 ] extern;COP:64.250473,-11.249085 TAG:13.700000,7.200000 [ 21:575 ] extern;COP:58.516117,-4.312431 TAG:15.900001,-8.300000 [ 21:625 ] extern;COP:56.897808,4.540877 TAG:10.900001,-16.600000 [ 23:625 ] extern;COP:51.531590,-9.537419 TAG:100.500000,-31.600000 [ 23:677 ] extern;COP:60.070187,-6.692714 TAG:84.500000,-22.100000 [ 23:726 ] extern;COP:69.058212,-6.228581 TAG:77.400002,-22.400000 [ 23:777 ] extern;COP:78.037163,-6.843762 TAG:54.600002,-24.200001 [ 23:827 ] extern;COP:87.036842,-6.919423 TAG:37.200001,-26.500000 [ 24:776 ] extern;COP:-53.794994,9.803370 TAG:-83.900002,-21.400000 [ 24:826 ] extern;COP:-62.581188,7.853291 TAG:-63.000000,-26.500000 [ 24:877 ] extern;COP:-70.017288,2.783342 TAG:-46.299999,-13.100000 [ 24:933 ] extern;COP:-77.650185,-1.985186 TAG:-42.700001,-3.000000 [ 24:976 ] extern;COP:-83.600792,-8.737244 TAG:-49.600002,8.900001 [ 25:026 ] extern;COP:-90.000000,-11.469121 TAG:-43.000000,20.600000 [ 25:976 ] extern;COP:62.518753,26.144903 TAG:101.700005,60.900002 [ 26:024 ] extern;COP:67.216827,33.821365 TAG:87.599998,58.400002 [ 26:076 ] extern;COP:70.880127,42.042084 TAG:68.099998,57.600002 [ 26:125 ] extern;COP:78.545349,46.758484 TAG:49.500000,53.299999 [ 26:176 ] extern;COP:85.755638,52.144733 TAG:33.500000,45.100002 [ 27:526 ] extern;COP:45.802967,16.352728 TAG:-6.000000,29.000000 [ 27:576 ] extern;COP:48.712578,24.869427 TAG:9.800000,34.700001 [ 27:625 ] extern;COP:54.009094,32.145889 TAG:23.100000,37.200001

Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
Ua
- Unknown akadamn
- Қаң. 24, 2025, 5:14 Т.Қ.
Qt - Тест 001. Сигналы и слоты
- Нәтиже:84ұпай,
- Бағалау ұпайлары4
Ua
- Unknown akadamn
- Қаң. 24, 2025, 4:22 Т.Қ.
Qt - Тест 001. Сигналы и слоты
- Нәтиже:42ұпай,
- Бағалау ұпайлары-8
Соңғы пікірлер
ИМ
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь МаксимовҚар. 22, 2024, 9:51 Т.Қ.

Evgenii LegotckoiҚаз. 31, 2024, 11:37 Т.Қ.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь МаксимовҚаз. 5, 2024, 4:51 Т.Қ.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
f
Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
firstlunoxodАқп. 15, 2025, 1:46 Т.Қ.

ДмитрийАқп. 3, 2025, 4:24 Т.Қ.
не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.