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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Расположение страницу pdf по центру окна  (Прочитано 1887 раз)
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


Просмотр профиля
« : Январь 16, 2024, 18:21 »

Всем привет.
Использую PdfScrollablePageView так как мне надо работать с однйо страницей, скролить если я использовал zoom или растянул по ширине страницу(скрол в данном случаи будет по вертикали).
данный обьект наследован от Flickable(начинается большое колличесвто проблем позиционированием и центровкой) по сравнению с PdfpageView.

Требуется при открытии растягивать страницу по высоте, иметь background так как нужен цвет фона вне страницы. Этого я добился когда взял исходники PdfScrollablePageView и внутри завернул обьект что отвечает за саму страницу в еще один обьект pageHolder дял фона.
Ниже данный кусок кода
Код:
    Rectangle
    {
        // добавлен был к исходному коду вот этот обьект
        id: pageHolder

        width: pdfView.width
        height: image.height
        color: "color"

        Rectangle
        {
            id: paper

            width: rot90 ? image.height : image.width
            height: rot90 ? image.width : image.height

            property real rotationModulus: Math.abs(root.pageRotation % 180)
            property bool rot90: rotationModulus > 45 && rotationModulus < 135
            property real minScale: 0.1
            property real maxScale: 10
            anchors.centerIn: parent

            PdfPageImage
            {
                id: image

                document: root.document
                currentFrame: pageNavigator.currentPage
                asynchronous: true
                fillMode: Image.PreserveAspectFit
                rotation: root.pageRotation
                property real pageScale: image.paintedWidth / document.pagePointSize(pageNavigator.currentPage).width
                anchors.centerIn: parent

                Shape
                {
                    anchors.fill: parent
                    visible: image.status === Image.Ready
Вот так выглядит страницу при первом открытии
https://ibb.co/ChThkJQ
Идея рабочая но плохая так как мне пришлось целый файл исходного кода к данному обьекту копировать.

И решил попробовать сделать почти по принципу орегинального кода, но снаружи сделал pageHolder что делает вот такой вид и уже не правильный. https://ibb.co/BGhdpww
Код:
Rectangle
{
    id: root

    property alias pageRotation:    pdfPageView.rotation
    property alias document:        pdfPageView.document
    property alias renderScale:     pdfPageView.renderScale
    property alias sourceSize:      pdfPageView.sourceSize
    property real threeWidth: 0

    function goToPage(page)
    {
        pdfPageView.goToPage(page)
    }

    function scaleToPage()
    {
        pdfPageView.scaleToPage()
    }

    function scaleToWidth()
    {
        pdfPageView.scaleToWidth()
    }

    Rectangle
    {
        id: pageHolder

        width: root.width
        height: root.height
        color: "red"


        PdfScrollablePageView
        {
            id: pdfPageView

            anchors.fill: parent

И еще один вариант это использовать PdfPageView для которого сделать внешнйи Flickable, но и тут возникли трудности с позиционированием.
Код:
    Flickable
    {
        id: flickable

        width: root.width
        height: root.height

        contentWidth: pdfPageView.width
        contentHeight: pdfPageView.height

        Rectangle
        {
            id: pageHolder

            width: root.width
            height: root.height
            color: "red"
            //color: rootViewPdf.pelData.pdfViewerProperties.colorBackground


            PdfPageView
            {
                id: pdfPageView
                width: root.width
                height: root.height
            }
        }
    }
И выглядит это уже совершенно странно, хотя мне кажется это должно быт ьправильным решенеим. Само собою скрол уже тут не работает. https://ibb.co/JzWhnL6

Может кто то с этим посоветовать какое то решение?
Записан
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


Просмотр профиля
« Ответ #1 : Январь 16, 2024, 18:45 »

Если для лучшего пониманяи проблемы нужен весь код то вот у меня есть тестовый проект https://files.fm/u/q9f8efj4hf
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Январь 17, 2024, 12:26 »

твой тестовый пример кривой: надо садиться и искать что поправить как в коде, так и в смаке файле, чтобы он заработал — это банальное неуважение к участникам форума.

во-первых, ты забыл поставить SplitView.fillWidth: true на свой pdfView. Дальше, если мы немного модифицируем UserPdfScrollablePageView2, то уже становится похоже на нужное поведение:
Код
color: "blue"
 
Rectangle
{
id: pageHolder
 
width: 400//root.width
height: root.height
color: "red"
anchors.centerIn: parent
 
 
PdfScrollablePageView
{
id: pageView
 
anchors.fill: parent
}
}
 

Записан

Изучением 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


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

Извиняюсь канечно но что надо править и для чего в cmake? Я же собираю с ним и все работает.
Записан
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


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

По поводу центровки для pageHolder я понял(я вроде пробовал раньше но чет было не так).
Но вот вопрсо что происходит если растянуть по ширине fitToWidth? Страница уже имеет не правильную шинину, а должна быть растянута в ширину по паренту. С зумом там тоже все не очень с позиционированием.
В общем задавать жесткие размеры ширины для pageHolder не очень хороший вариант.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Январь 17, 2024, 16:42 »

Извиняюсь канечно но что надо править и для чего в cmake? Я же собираю с ним и все работает.
у меня заработало только после удаления зашитого CMAKE_MODULE_PATH. и еще зашитый путь к пдфке пришлось править в коде.
По поводу центровки для pageHolder я понял(я вроде пробовал раньше но чет было не так).
Но вот вопрсо что происходит если растянуть по ширине fitToWidth? Страница уже имеет не правильную шинину, а должна быть растянута в ширину по паренту. С зумом там тоже все не очень с позиционированием.
В общем задавать жесткие размеры ширины для pageHolder не очень хороший вариант.
зашитая ширина была для примера, конечно Улыбающийся Чтоб навело на мысли при взгляде на картинки. В реальности надо брать текущие размеры страницы (сходу не понял как это сделать), а может там и вручную какие-то расчеты проводить для корректного центрирования.
Записан

Изучением 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
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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