BlinCT10 травня 2017 р. 03: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 хостинг.Вам це подобається? Поділіться в соціальних мережах!
AD
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
m
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
m
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Останні коментарі
ИМ
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 листопада 2024 р. 11:51
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов05 жовтня 2024 р. 07:51
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi24 червня 2024 р. 15:11
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 листопада 2024 р. 06:04
NSProject04 червня 2022 р. 03:49
IscanderChe31 жовтня 2024 р. 15:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…