Здравствуйте!
Полный нуб в куте, не пойму, куда что совать
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();
Получаю маленькую шляпку в левом верхнем углу. ЧЯНД?
Здравствуйте, Marty, Вы писали:
M>pPvScrollArea = new QScrollArea();
pPvScrollArea->setBackgroundRole(QPalette::Dark);
pPvScrollArea->setWidget(pPageView);
pSplitter->addWidget(pPageView pPvScrollArea);
pPvScrollArea->show();
Здравствуйте, 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 добавлять, то там видимо сам сплиттер растягивает
Здравствуйте, 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>
|
| |
Здравствуйте, 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>
Спс
Здравствуйте, 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 не изменяется, и его элементы тоже не изменяются.