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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.0.1 - Изменение положения scroller-ов QScrollArea  (Прочитано 8033 раз)
ElderOrb
Гость
« : Октябрь 27, 2005, 10:32 »

Я пишу класс для рисования графиков (по некоторым причинам Qwt мне не подходит). Появилась мысль использовать QGridLayout (3x3), в коий разместить ось x, ось y, горизонтальный скролер, вертикальный скролер и в центре - собственно QScrollArea. Проблема в том, что скроллеры принадлежат QScrollArea и отрисовываются внутри её, тогда как мне нужно снаружи. Я попробовал сделать следующее:
Код:

plotLayout = new QGridLayout(this);
setLayout(plotLayout);

scrollArea = new QScrollArea(this);
scrollArea->setObjectName("scrollArea");

curveWidget = new QWidget(scrollArea);
curveWidget->setObjectName("curveWidget");

scrollArea->setWidgetResizable(true);
scrollArea->setWidget(curveWidget);

plotLayout->addWidget(new QFrame(), 0, 0);
plotLayout->addWidget(scrollArea->horizontalScrollBar(), 0, 1);
plotLayout->addWidget(new QFrame(), 0, 2);

plotLayout->addWidget(new QFrame(), 1, 0);
plotLayout->addWidget(scrollArea, 1, 1);
plotLayout->addWidget(scrollArea->verticalScrollBar(), 1, 2);

.. в результате добился того, что скролеры занимают желаемое мной положение во время ресайза. Когда же ресайз заканчивается они перепрыгивают назад во внутрь QScrollArea и то криво. Вопрос: можно ли принципиально вынести скролеры за пределы QScrollArea, и если да - каким наиболее простым способом это можно сделать?
Записан
ElderOrb
Гость
« Ответ #1 : Октябрь 27, 2005, 11:58 »

Если кому интересно, решил проблему следующим образом: те скролеры, которые показывает QScrollArea я спрятал, в нужных мне местах разместил свои скролеры и связал свои с невидимыми QScrollArea-вскими через
connect(hor, SIGNAL(valueChanged(int)), scrollArea->horizontalScrollBar(), SLOT(setValue(int)));
и т.п.

Может и кривовато зато работает ж)
Записан
QCasper
Гость
« Ответ #2 : Октябрь 27, 2005, 21:58 »

Кстати по поводу QScrollArea - наследую свой класс от вышеупомянутого, рисую какой-нить хлам в paintEvent и хочу его скролить, скрольные бегунки бегают, а эффекта никакого. Как вообще к своему собсному виджету скролы добавить? Причем имеется ввиду не потом добавить, а сделать его со скролами
Записан
ElderOrb
Гость
« Ответ #3 : Октябрь 28, 2005, 10:17 »

Цитировать
рисую какой-нить хлам в paintEvent
- в каком paintEvent ? QScrollArea-вском, или в виджэете, который в эту QScrollArea вставлен? Если первый случай - то ничего путного и не должно получиться.

Нужно как-то так:
1. создать QScrollArea
2. создать класс, унаследованный от QWidget
3. передать QScrollArea указатель на виджэт
4. в виджэте перегрузить paintEvent и отрисовывать там всё что пожелается

Полосы прокрутки будут появляться автоматически в зависимости от размеров  QScrollArea и виджэта.

p.s. Если лениво ради одного paintEvent-а делать подкласс QWidget-а, можно воспользоваться installEventFilter
Записан
QCasper
Гость
« Ответ #4 : Октябрь 28, 2005, 20:05 »

нет, так наверное не покатит, я хочу сделать компонент, к примеру, который картинки отображает, и чтобы он сразу шел со скролами
Записан
ElderOrb
Гость
« Ответ #5 : Октябрь 29, 2005, 12:42 »

Отлично покатит, и вот тому пример: http://qt4.digitalfanatics.org/articles/zoomer.html
Записан
QCasper
Гость
« Ответ #6 : Октябрь 29, 2005, 14:19 »

Цитата: "ElderOrb"
Отлично покатит, и вот тому пример: http://qt4.digitalfanatics.org/articles/zoomer.html


Я видимо неудачно объяснил. Я создал компонент. Теперь некий Вася берет и тупо бросает его в Qt Designer'e на форму и все, он сразу со скролами, которые корректно работают, а не в теле главной программы скролл создавать.
Записан
ElderOrb
Гость
« Ответ #7 : Октябрь 29, 2005, 17:32 »

Не вопрос! Этот компонент будет содержать в себе QScrollArea и наследник от QWidget-а. В чём, собственно, проблема?
Записан
QCasper
Гость
« Ответ #8 : Октябрь 29, 2005, 19:58 »

А я еще видел реализацию где компонент наследуется от QScrollArea и благодаря этому все работает, только вот какие методы QScrollArea (QAbstractArea) надо перегрузить чтобы все как надо работало, а то если просто унаследовать то скроллы появляются, но от них никаких понтов.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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