BlinCTMay 10, 2017, 3:20 a.m.
Управление размерами и перемещениями 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
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
d
- dsfs
- April 26, 2024, 2:56 p.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
d
- dsfs
- April 26, 2024, 2:35 p.m.
C++ - Test 001. The first program and data types
- Result:73points,
- Rating points1
Last comments
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоFeb. 5, 2024, 12:50 p.m.
EVADec. 25, 2023, 9:30 p.m.
Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Now discuss on the forum
Best Indian Food Restaurant In Cincinnati OH Ready to embark on a gastronomic journey like no other? Join us at App india restaurant and discover why we're renowned as the Best Indian Food Restaurant In Cincinnati OH . Whether y…
Evgenii LegotckoiMay 3, 2024, 12:07 a.m.
IscanderCheApril 30, 2024, 2:22 p.m.
Павел ДорофеевApril 14, 2024, 12:35 p.m.