QScrollArea
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 10.06.19 22:28
Оценка:
Здравствуйте!

Полный нуб в куте, не пойму, куда что совать

pPageView   = new QLabel();

pSplitter = new QSplitter(Qt::Horizontal);
pSplitter->addWidget(pPageView);
setCentralWidget(pSplitter);


Так работает. И всё бы хорошо, только скролов нет. Я типа картинку показываю, некомильфо какое-то получается

Делаю так:
pPvScrollArea = new QScrollArea();
pPvScrollArea->setBackgroundRole(QPalette::Dark);
pPvScrollArea->setWidget(pPageView);
pSplitter->addWidget(pPageView);
pPvScrollArea->show();


Получаю маленькую шляпку в левом верхнем углу. ЧЯНД?
Маньяк Робокряк колесит по городу
Отредактировано 10.06.2019 23:13 Marty . Предыдущая версия .
Re: QScrollArea
От: Chorkov Россия  
Дата: 11.06.19 01:48
Оценка:
Здравствуйте, Marty, Вы писали:

M>
pPvScrollArea = new QScrollArea();
pPvScrollArea->setBackgroundRole(QPalette::Dark);
pPvScrollArea->setWidget(pPageView);
pSplitter->addWidget(pPageView pPvScrollArea);
pPvScrollArea->show();
Отредактировано 11.06.2019 1:50 Chorkov . Предыдущая версия .
Re[2]: QScrollArea
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.06.19 19:45
Оценка:
Здравствуйте, Chorkov, Вы писали:


M>>
C>pPvScrollArea = new QScrollArea();
C>pPvScrollArea->setBackgroundRole(QPalette::Dark);
C>pPvScrollArea->setWidget(pPageView);
C>pSplitter->addWidget(pPageView pPvScrollArea);
C>pPvScrollArea->show();
C>


Да я уже по всякому перепробовал. Так тоже не работает

Может, надо как-то сказать, чтобы pPageView растянулся на весь размер pPvScrollArea? Если pPageView в pSplitter добавлять, то там видимо сам сплиттер растягивает
Маньяк Робокряк колесит по городу
Re: QScrollArea
От: Igore Россия  
Дата: 13.06.19 05:55
Оценка: 4 (1)
Здравствуйте, Marty, Вы писали:

M>Здравствуйте!

M>Полный нуб в куте, не пойму, куда что совать

M>
M>pSplitter = new QSplitter(Qt::Horizontal);
M>pSplitter->addWidget(pPageView);
M>


M>Так работает. И всё бы хорошо, только скролов нет. Я типа картинку показываю, некомильфо какое-то получается


M>Делаю так:

M>
M>pPvScrollArea = new QScrollArea();
M>pPvScrollArea->setBackgroundRole(QPalette::Dark);
M>pPvScrollArea->setWidget(pPageView);
M>pSplitter->addWidget(pPageView);
M>

M>Получаю маленькую шляпку в левом верхнем углу. ЧЯНД?

А может лучше в дизайнере все сделать, там все видно будет. Первое, почему у тебя в QSplitter один виджет? Второе чтобы виджеты занимали всю доступную область они должны располагаться в Q*Layout. В Qt designer-e ты это можешь увидеть сразу(и если нажать Ctrl+R сразу поиграться с созданым), или в Qt Creator-e, посмотри краткие видео уроки на QSplitter и QLayout, все что тебе нужно это пару минут чтобы понять в какой последовательности что располагается, потом будешь создавать програмно. Сделал тебе быстро ui который вроде ты хочешь c QScrollArea и сплитером, скопируй сохрани в ui файл и замени или добавь в проект где твой основной виджет.
  "ui"

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>main</class>
<widget class="QMainWindow" name="main">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1134</width>
<height>789</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<widget class="QWidget" name="centralwidget">
<property name="minimumSize">
<size>
<width>820</width>
<height>0</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>370</width>
<height>769</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QLineEdit" name="lineEdit"/>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>

Re[2]: QScrollArea
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.06.19 16:57
Оценка:
Здравствуйте, Igore, Вы писали:

M>>Получаю маленькую шляпку в левом верхнем углу. ЧЯНД?


Разобрался. Всё нормально работало, просто почему-то масштаб был 2 районе 1 процента, а так честно картинку показывало. Передрал полностью пример image view'ра, всё норм


I>А может лучше в дизайнере все сделать, там все видно будет.


А в дизайнере — я потыкал, вроде на форму положил layout, по идее ожидал, что он на всю форму растянется, покажет размеры контролируемой им области, а он небольшим прямоугольником остался. Я так и не понял, будут ли автоматом на него виджеты класться, или надо где-то что-то будет пошвелить. Да и примеры все кодом написаны, так что так показалось проще. Потом может ещё попробую


I>Первое, почему у тебя в QSplitter один виджет?


Просто остальные не стал тут показывать, они к проблеме не относились


I>Второе чтобы виджеты занимали всю доступную область они должны располагаться в Q*Layout.


А сплиттер вроде заместо Q*Layout работае, не?


I>В Qt designer-e ты это можешь увидеть сразу(и если нажать Ctrl+R сразу поиграться с созданым), или в Qt Creator-e, посмотри краткие видео уроки на QSplitter и QLayout, все что тебе нужно это пару минут чтобы понять в какой последовательности что располагается, потом будешь создавать програмно.


Да с этим вроде разобрался. Проблема была не в них


I>Сделал тебе быстро ui который вроде ты хочешь c QScrollArea и сплитером, скопируй сохрани в ui файл и замени или добавь в проект где твой основной виджет.



I>
  "ui"
I>



Спс
Маньяк Робокряк колесит по городу
Re[3]: QScrollArea
От: Igore Россия  
Дата: 14.06.19 05:06
Оценка: 4 (1)
Здравствуйте, Marty, Вы писали:

I>>А может лучше в дизайнере все сделать, там все видно будет.


M>А в дизайнере — я потыкал, вроде на форму положил layout, по идее ожидал, что он на всю форму растянется, покажет размеры контролируемой им области, а он небольшим прямоугольником остался. Я так и не понял, будут ли автоматом на него виджеты класться, или надо где-то что-то будет пошвелить. Да и примеры все кодом написаны, так что так показалось проще. Потом может ещё попробую


Когда ты в дизайнере помещяешь layout на виджет, это тоже самое что ты виджет помещаешь на виджет, а тебе нужен widget->setLayout чтобы child занимал всю облость parent-a, для этого в дизайнере кинь виджет(child) на виджет(parent), после этого кликни на parent и в меню или иконками установи parent-y нужный Layout.

Програмно это будет выглядеть примерно так:
QWidget* parent = new QWidget();
QVBoxLayout* verticalLayout = new QVBoxLayout(parent);
/*
QVBoxLayout* verticalLayout = new QVBoxLayout();
parent->setLayout( verticalLayout );
*/
QLabel* child = new QLabel( "test" );
verticalLayout->addWidget( child );//parent->layout()->addWidget(child);


M>А сплиттер вроде заместо Q*Layout работае, не?

Да, но сам QSplitter тоже должен быть помещен в Layout parent-a иначе, QSplitter не изменяется, и его элементы тоже не изменяются.
Отредактировано 14.06.2019 11:20 Igore . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.