alex_lip
alex_lipТам. 7, 2018, 3:14 Т.Ж.

Rotate canvas QML

Разбираю пример , который должен нарисовать квадрат и такой же квадрат повернутый на 45 градусов.
Почему-то не работает ни translate ни rotate. Пример из книжки(мои только заголовки) - где может быть проблема?

import QtQuick.Window 2.2
import QtQuick 2.10
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3

import "content" ApplicationWindow { id:window visible: true width: 840 height: 480 title: qsTr("TEST")
Canvas {
id: root
width: 240; height: 120
onPaint: {
var ctx = getContext("2d")
ctx.strokeStyle = "blue"
ctx.lineWidth = 4

ctx.beginPath()
ctx.rect(-20, -20, 40, 40)
ctx.translate(120,60)
ctx.stroke()

// draw path now rotated
ctx.strokeStyle = "green"
ctx.rotate(Math.PI/4)
ctx.stroke()
}
} }
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

4
Evgenii Legotckoi
  • Там. 7, 2018, 3:25 Т.Ж.
  • Жауап шешім ретінде белгіленді.

Ну вот так это будет работать

import QtQuick.Window 2.2
import QtQuick 2.10
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3


//import "content"
ApplicationWindow {
    id:window
    visible: true
    width: 840
    height: 480
    title: qsTr("TEST")


    Canvas {
        anchors.centerIn: parent
        id: root
        width: 200; height: 200
        onPaint: {
            var ctx = getContext("2d")
            ctx.strokeStyle = "blue"
            ctx.lineWidth = 4

            ctx.beginPath()             // Начинаем рисовать
            ctx.translate(120,60)       // Устанавливаем translation перед началом рисования
            ctx.rect(0, 0, 40, 40)      // Отрисовываем квадрат
            ctx.stroke()                // Заканчиваем рисовать

            // draw path now rotated
            ctx.strokeStyle = "green"
            ctx.beginPath()             // Начинаем рисовать
            ctx.rotate(Math.PI/4)       // Поворачиваем
            ctx.rect(-20, -20, 40, 40)  // Отрисовываем квадрат
            ctx.stroke()                // Заканчиваем рисовать
        }
    }
}

Получается, что изменения translate и rotate нужно устанавливать перед отрисовкой квадратов. Также, если отрисовываем квадраты выходят за область Canvas, это у вас там отрицательные координаты были, то те части квадратов не отрисовываются. Возможно, это можно настроить, но нужно внимательно читать документацию, поскольку
clip: false

не сработало для того, что отрисовывается в обработчике onPaint
    alex_lip
    • Там. 7, 2018, 4:18 Т.Ж.
    • (өңделген)
    Вы два квадрата рисуете - а в примере один и тот же. Там смысл примера в том, что квадрат подготавливается, перемещается, рисуется, канвас поворачивается и опять отрисовывается .

      alex_lip
      • Там. 7, 2018, 4:33 Т.Ж.
      Видимо пример неверен и нужно два квадрата рисовать (я немного координаты подправил чтобы результат соответствовал картинке).
      ApplicationWindow {
          id:window
          visible: true
          width: 840
          height: 480
          title: qsTr("TEST")
      
      
          Canvas {
                 anchors.centerIn: parent
                 id: root
                 width: 200; height: 200
                 onPaint: {
                     var ctx = getContext("2d")
                     ctx.strokeStyle = "blue"
                     ctx.lineWidth = 4
      
                     ctx.beginPath()             // Начинаем рисовать
                     ctx.translate(120,60)       // Устанавливаем translation перед началом рисования
                     ctx.rect(-20, -20, 40, 40)      // Отрисовываем квадрат
                     ctx.stroke()                // Заканчиваем рисовать
      
                     // draw path now rotated
                     ctx.strokeStyle = "green"
                     ctx.beginPath()             // Начинаем рисовать
                     ctx.rotate(Math.PI/4)       // Поворачиваем
                     ctx.rect(-20, -20, 40, 40)  // Отрисовываем квадрат
                     ctx.stroke()                // Заканчиваем рисовать
                 }
             }
      
      }
      





        Evgenii Legotckoi
        • Там. 7, 2018, 4:38 Т.Ж.

        Мне тоже кажется, что пример ошибочный.. просто совсем никак иначе не работает.

          Пікірлер

          Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
          Кіріңіз немесе Тіркеліңіз
          OI
          • Ora Iro
          • Жел. 24, 2024, 6:38 Т.Ж.

          C++ - Тест 001. Первая программа и типы данных

          • Нәтиже:40ұпай,
          • Бағалау ұпайлары-8
          AD

          C++ - Тест 004. Указатели, Массивы и Циклы

          • Нәтиже:50ұпай,
          • Бағалау ұпайлары-4
          m
          • molni99
          • Қаз. 26, 2024, 1:37 Т.Ж.

          C++ - Тест 004. Указатели, Массивы и Циклы

          • Нәтиже:80ұпай,
          • Бағалау ұпайлары4
          Соңғы пікірлер
          ИМ
          Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
          Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
          Evgenii Legotckoi
          Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
          Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
          A
          ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
          Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
          ИМ
          Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
          Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
          d
          dblas5Шілде 5, 2024, 11:02 Т.Ж.
          QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
          Енді форумда талқылаңыз
          WD
          Weave DecorЖел. 28, 2024, 3:18 Т.Ж.
          Weave & Decor Weave Decor Where passion for textiles meets innovative design. We specialize in manufacturing a diverse range of high-quality bed sheets, from classic to contemporary, using premium fa…
          n
          nklyЖел. 27, 2024, 11:41 Т.Ж.
          Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. У меня есть Представление QTreeView и древовидная модель QStandardItemModel подключенная к представлению. Итемы в модели QStandardItem. В разных ветках дерева могут быть элементы с одинаковым им…
          Evgenii Legotckoi
          Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
          добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
          t
          tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
          google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
          NSProject
          NSProjectМаусым 4, 2022, 3:49 Т.Ж.
          Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

          Бізді әлеуметтік желілерде бақылаңыз