Nano Hash - криптовалюты, майнинг, программирование

Qt mouseMoveEvent работает слишком медленно

Я хочу реализовать виджет в стиле Paint, в котором вы можете рисовать фигуры с помощью мыши.

Но mouseMoveEvent не часто называют, чтобы это сделать: если вы хотите нарисовать линию и двигаетесь мышью в среднем быстро, то в итоге вы получите что-то вроде пунктирной линии ...

Есть ли какой-нибудь параметр в Qt, который регулирует это поведение? Есть ли какой-либо (независимый от платформы) альтернативный способ получить событие при перемещении мыши (при использовании Qt для окна)?

31.08.2016

  • вы проверили этот пример? doc.qt.io/qt-5/qtwidgets-widgets- scribble-example.html 31.08.2016
  • Ваши предположения о mouseMoveEvent неверны. Сообщение о событиях, инициированных оборудованием, не гарантируется. Вместо этого система (в любом случае каждая известная мне система) объединяет несколько аппаратных событий в единый логический mouseMoveEvent, который представляет относительное движение с момента последней проверки. Я не знаю платформенно-независимого решения (в Windows вы можете использовать GetMouseMovePointsEx). Решение, не зависящее от платформы, вероятно, предполагает рисование линий (вместо точек). 31.08.2016
  • @Hayt Я искал такой пример и не нашел. Спасибо. 31.08.2016
  • @IInspectable Я сомневаюсь, что это приближение сработает, потому что дыры довольно большие. Но я попробую. 31.08.2016
  • @andrew: Я сомневаюсь, что это приближение сработает, потому что дыры довольно большие - Что ж, тогда вы не получите особого удовольствия от Пример каракуля. Он использует именно это приближение. Либо так, либо обработка ввода с помощью мыши зависит от платформы. 31.08.2016
  • @IInspectable Так как это работает? Действительно ли mouseMoveEvent срабатывает при изменении направления? Потому что иначе это приближение не сработало бы. 31.08.2016
  • mouseMoveEvent зависит от деталей реализации конкретной платформы, на которой работает приложение. Я могу только прокомментировать реализацию Windows, и, конечно, нет никакой гарантии, что вы получите уведомление о экстремумах при изменении направления. Вы получаете «родные» WM_MOUSEMOVE сообщения только в том случае, если очередь сообщений пуста и указатель мыши переместился с момента последнего вызова функции получения сообщения. Поскольку Qt злоупотребляет очередью сообщений, сбрасывая массу ненужных сообщений, неблагоприятные эффекты более заметны в приложениях Qt, чем в собственных приложениях. 31.08.2016
  • GetMouseMovePointsEx можно использовать для исправления артефактов, но я считаю, что Qt слишком деструктивен по отношению к собственным сообщениям Windows, чтобы давать надежные результаты (например, он назначает новые метки времени для mouseMoveEvents вместо сохранения собственных меток времени). Короче говоря, если вам нужна такая высокоточная обработка ввода, вам придется написать код для конкретной платформы. Для получения надежного результата вам, вероятно, придется полностью сбросить Qt, так как это безвозвратно мешает собственной обработке ввода. 31.08.2016
  • Использование линейного алгоритма Брезенхема отлично работает. Спасибо. 31.08.2016
  • Нет никаких преимуществ в реализации рисования линий своими руками перед использованием QPainter drawLine. И ни один из них не решает проблему, которую вы пытаетесь решить: получение точной информации о движении мыши. Независимо от того, выполняете ли вы рендеринг вручную с использованием любого заданного алгоритма или встроенного кода рисования линий, нет гарантии, что вы получите события для поворотных точек, например, при изменении направления. Точно так же рисование быстрых кругов не даст вам хорошо закругленных форм, независимо от того, как вы выполняете рисование линий. 01.09.2016

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..