Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: SektorCT от Ноябрь 23, 2023, 23:23



Название: Правильное позиционирование дочерних обьектов в SplitView
Отправлено: SektorCT от Ноябрь 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
            }
        }
    }
}



Название: Re: Правильное позиционирование дочерних обьектов в SplitView
Отправлено: SektorCT от Ноябрь 24, 2023, 11:22
Вот так выглядит если со скоролом  https://ibb.co/wpt4LQH (https://ibb.co/wpt4LQH)

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

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

Код:
PdfPageView
{
    id: pdfView

    anchors.centerIn: parent

И еще у них разница в наследовании, тот что нужен со скролом он от Flickable


Название: Re: Правильное позиционирование дочерних обьектов в SplitView
Отправлено: kambala от Ноябрь 25, 2023, 22:11
то есть проблема проявляется только если объект со скроллом?

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

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


Название: Re: Правильное позиционирование дочерних обьектов в SplitView
Отправлено: SektorCT от Ноябрь 30, 2023, 11:28
то есть проблема проявляется только если объект со скроллом?

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

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

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


Название: Re: Правильное позиционирование дочерних обьектов в SplitView
Отправлено: SektorCT от Декабрь 18, 2023, 17:26
В общем от части решилась проблема, но только от части.
Пришлось вытаскивать все из PdfScrolablePageView и делать кастомный обьект из него, в нем настраивать позиционирование как основнйо области так и той что отображает страницу.
Но вот до сих пор не моуг решить растягивание страницы по шинине. За это отвечает функция scaleToWidth(). Почему то страница занимает не шириун парента а выходит за пределы.


Название: Re: Правильное позиционирование дочерних обьектов в SplitView
Отправлено: kambala от Декабрь 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.


Название: Re: Правильное позиционирование дочерних обьектов в SplitView
Отправлено: SektorCT от Декабрь 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.

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


Название: Re: Правильное позиционирование дочерних обьектов в SplitView
Отправлено: kambala от Декабрь 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
...
}
}