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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Правильное позиционирование дочерних обьектов в SplitView  (Прочитано 4591 раз)
SektorCT
Частый гость
***
Offline Offline

Сообщений: 216


Просмотр профиля
« : Ноябрь 23, 2023, 23:23 »

Всем привет.
Имеется дочерние обьекты в SplitView, в моем случаи это TreeView и PdfScrollablePageView.
Проблема в том что почему то не получается позиционирование открытой страницы по центру парента для PdfScrollablePageView.
Почему то левый верхний угол страницы это центр парента. Может кто подскажет как для дочернего обьекта SplitView надо правильно позицию выставлять?
Код прилогается ниже.

Код:
import QtQuick
import QtQuick.Controls.Basic
import QtQuick.Pdf
import QtQuick.Layouts
import Qt5Compat.GraphicalEffects

Rectangle
{
    id: root

    property int defaultWidthBookmark : root.width * 0.1

    PdfDocument
    {
        id: docPdf
        source: Qt.resolvedUrl("file:///pathtofile")
    }

    SplitView
    {
        id: splitView

        anchors.fill: parent
        orientation: Qt.Horizontal

        handle: Rectangle
        {
            id: handleDelegate
            implicitWidth: 4
            color: ""black
        }

        Rectangle
        {
            id: rectTreeView

            SplitView.preferredWidth: root.defaultWidthBookmark

            TreeView
            {
                id: treeViewBookmark

                anchors.fill: parent

                delegate: Item
                {
                    id: treeDelegate

                    Rectangle
                    {
                        id: labelRect

                        width: text.width
                        height: text.height

                        Text
                        {
                            id: text

                            clip: true
                            antialiasing: true
                            horizontalAlignment: Text.AlignHCenter
                            verticalAlignment: Text.AlignVCenter
                        }
                    }
                }
            }
        }

        Rectangle
        {
            id: rectPdfPageView
            SplitView.fillWidth: true
//            SplitView.fillHeight: true
            SplitView.minimumWidth: 500
            color: "blue"
            clip: true

            PdfScrollablePageView
            {
                id: pdfView

//                anchors.centerIn: parent
                anchors.top: parent.top
                anchors.bottom: parent.bottom
                document: docPdf
                contentWidth: 100
            }
        }
    }
}

Записан
SektorCT
Частый гость
***
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #1 : Ноябрь 24, 2023, 11:22 »

Вот так выглядит если со скоролом  https://ibb.co/wpt4LQH

А вот так если обьект без скрола https://ibb.co/YNZf7Yq

В обоих случаях я пробою вот так отцентровать

Код:
PdfPageView
{
    id: pdfView

    anchors.centerIn: parent

И еще у них разница в наследовании, тот что нужен со скролом он от Flickable
Записан
kambala
Джедай : наставник для всех
*******
Online Online

Сообщений: 4727



Просмотр профиля WWW
« Ответ #2 : Ноябрь 25, 2023, 22:11 »

то есть проблема проявляется только если объект со скроллом?

в первом сообщении используется PdfScrollablePageView, а во втором уже PdfPageView. Это и есть «со скроллом и без»?

думаю, надо посмотреть на реализацию PdfScrollablePageView
Записан

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

Сообщений: 216


Просмотр профиля
« Ответ #3 : Ноябрь 30, 2023, 11:28 »

то есть проблема проявляется только если объект со скроллом?

в первом сообщении используется PdfScrollablePageView, а во втором уже PdfPageView. Это и есть «со скроллом и без»?

думаю, надо посмотреть на реализацию PdfScrollablePageView

разница в том что PdfPageView наследован от Rectangle а вот PdfScrollablePageView от Flicable и тут начинается веселье. Проблема с позиционированием и центровкой на паренте, его расширением.
Очень сильно разнится работа.
Записан
SektorCT
Частый гость
***
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #4 : Декабрь 18, 2023, 17:26 »

В общем от части решилась проблема, но только от части.
Пришлось вытаскивать все из PdfScrolablePageView и делать кастомный обьект из него, в нем настраивать позиционирование как основнйо области так и той что отображает страницу.
Но вот до сих пор не моуг решить растягивание страницы по шинине. За это отвечает функция scaleToWidth(). Почему то страница занимает не шириун парента а выходит за пределы.
Записан
kambala
Джедай : наставник для всех
*******
Online Online

Сообщений: 4727



Просмотр профиля WWW
« Ответ #5 : Декабрь 18, 2023, 23:25 »

Flickable does not automatically clip its contents. If it is not used as a full-screen item, you should consider setting the clip property to true.
Записан

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

Сообщений: 216


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

Flickable does not automatically clip its contents. If it is not used as a full-screen item, you should consider setting the clip property to true.

Это понятно, но мне не надо обрезать страницу, мне надо по ширине растянуть и чтобы скрол остался только вертикальный. Сама же страница по ширине видна должна быть вся.
В этом проблема
Записан
kambala
Джедай : наставник для всех
*******
Online Online

Сообщений: 4727



Просмотр профиля WWW
« Ответ #7 : Декабрь 19, 2023, 19:50 »

If you want the ScrollView to only scroll vertically, you can bind contentWidth to availableWidth (and vice versa for contentHeight). This will let the contents fill out all the available space horizontally inside the ScrollView, taking any padding or scroll bars into account.

пример:
Код:
ScrollView {
anchors.fill: parent

contentWidth: availableWidth
clip: true

Flickable {
anchors.fill: parent
...
}
}
« Последнее редактирование: Декабрь 19, 2023, 19:53 от kambala » Записан

Изучением 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.055 секунд. Запросов: 22.