Russian Qt Forum
Ноябрь 25, 2024, 04:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Image в qml  (Прочитано 4018 раз)
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


Просмотр профиля
« : Декабрь 30, 2023, 16:58 »

Всем привет.
Мне требуется работа с изображением в qml, ротация и зум изображения, растягивание по высоте(fitToHeight) и по ширине(fitToWidth).
В qml обьекте Image я не нашел данные методы но они есть в С++ классе.
Как или возможно ли открыть обьект в С++ классе и уже этот обьект передать в qml чтобы с ним работать? Удобно что я в С++ когда надо поверну изображение или растяну и результат в qml передам для отобраения.

Или нет то как смотит подойти к решению необходимого функционала?

Спасибо
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Декабрь 30, 2023, 20:00 »

через свойство source ты указываешь где взять картинку: это может быть вшитый ресурс, папка приложения, временная папка и т.д. То есть в С++ меняешь изображение как тебе надо, сохраняешь куда-то этот файл и подаешь путь к нему в свойство source.

вон есть еще какая-то хитрая штука, но я ею не пользовался https://doc.qt.io/qt-6/qquickimageprovider.html
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


Просмотр профиля
« Ответ #2 : Декабрь 30, 2023, 22:05 »

через свойство source ты указываешь где взять картинку: это может быть вшитый ресурс, папка приложения, временная папка и т.д. То есть в С++ меняешь изображение как тебе надо, сохраняешь куда-то этот файл и подаешь путь к нему в свойство source.

вон есть еще какая-то хитрая штука, но я ею не пользовался https://doc.qt.io/qt-6/qquickimageprovider.html

Сохранять куда то и открывать не вариант, вообще не вариант, мне на прямую надо только с одним файлом работать. Поварачивать, зум делать. Это мне надо после каждого действия куда то сохранять и открывать да еще и так чтобы юзер думал что он с тем же файлмо работает?
Нет, плохая идея да еще и сохранять нельзя.
Записан
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


Просмотр профиля
« Ответ #3 : Январь 05, 2024, 13:47 »

В общем я взял функции а точнее принцип рабоыт для растягивания из модуля по работе с pdf и вроде как помогло.
Код фактически выглядит сейчас так(из 2 файлов, 3 части с кнопками умправления, центр изображение и статусбар низ. 2 файл это непосредственно центр):

Код:
Item
{
    id: root
 
    ColumnLayout
    {
        anchors.fill: parent
        spacing: 10
 
        Item
        {
            id: headerRec
 
            Layout.fillWidth: true
            implicitHeight: childrenRect.height
 
            RowLayout
            {
                id: rowLayoutToolBar
 
                width: parent.width
                spacing: 20
 
                ButtonComponent
                {
                    id: zoomZoomIn
                }
 
                ButtonComponent
                {
                    id: zoomZoomOut
                }
            }
        }
 
        Item
        {
            Layout.fillWidth: true
            Layout.fillHeight: true
            Layout.alignment: Qt.AlignBottom
 
            CustomImage
            {
                id: viewerImage
 
                anchors.fill: parent
                visible: root.pPelData.bShowImage
                pelData: pPelData
            }
        }
 
        StatusBar
        {
            id: statusBar
 
            Layout.fillWidth: true
        }
    }
}

И код самого центрального обьекта
Код:
Flickable
{
    id: root
 
    Rectangle
    {
        id: parentImage
 
        anchors.fill: parent
        color: "#5a5a5a"
        clip: true
        border.color: "red"
        border.width: 1
 
        Image
        {
            id: imageJpg
 
            property real rotationModulus: Math.abs(root.pageRotation % 180)
            property bool rot90: rotationModulus > 45 && rotationModulus < 135
 
            fillMode: Image.PreserveAspectFit
            source: "pathToFile"
            anchors.top: parent.top
            anchors.bottom: parent.bottom
            anchors.horizontalCenter: parent.horizontalCenter
 
            Rectangle
            {
                anchors.fill: parent
                border.color: "blue"
                border.width: 1
                color: "transparent"
            }
 
            antialiasing: true
            rotation: root.pageRotation
        }
    }
}

А проблемы теперь по факту 2, первая это странно выглядят границы центрального обьекта с изображением, при этом само изображение нормально распологается. Может я не должен использовать anchors.fill: parent для parentImage.
Получается что верхняя граница(она красного цвета) находится под верхнми обьектом.
https://ibb.co/Rj56nx5

А вторая проблема это то что при растягивании изображения у меня скрол не работает. Может при прокручивании колосека на мыши обьект Flickable должен какой то сигнал испускать?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.195 секунд. Запросов: 23.