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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QScrollView  (Прочитано 6426 раз)
Evgeniy N. Sharapov
Гость
« : Февраль 24, 2005, 19:51 »

Никак не могу заставить скроллить сабж... В его viewport() разметка с автоадд, у виджетов предок viewport(), добавляются в скролл через addChild().... Все перепробовал... Нигде не нашел примеров... Думаю, что нежно соединить конкретные слот и сигнал, но какой... Я и через скроллбары пытался и через contentsMoving(int,int) -> center(int,int)  и прочими путями... Просмотрел в ассистанте, экзамплах.. Не нашел... Плохо искал?
Записан
Sergeich
Гость
« Ответ #1 : Февраль 24, 2005, 20:18 »

Установи размеры с помощью QScrollView::resizeContents( int, int );
Например:
Код:

  QScrollView* sv = new QScrollView( this );
  sv->resizeContents( 1000, 1000 );
  for ( int i=0; i < 10; i++ ) {
    QLabel* child = new QLabel( QString("CHILD%1").arg(i), sv->viewport() );
    sv->addChild(child, 100, 100*i + 50 );
   }
Записан
Evgeniy N. Sharapov
Гость
« Ответ #2 : Февраль 24, 2005, 20:30 »

А как бы это все еще к разметке привязать... Не самому же считать... То есть заранее в коде нельзя сказать что за виджеты будут и какого размера... Они просто все пихаются в надежде неа то, что layout сам разберется как их разместить (собственно зачем он еще нужен.. ) Если только из Layouta вытащить префферед размер и сделать с ним ресайз....
Записан
Sergeich
Гость
« Ответ #3 : Февраль 24, 2005, 21:03 »

А если создать один большой виджет, в который динамически добавлять мелкие, а этот виджет в свою очередь довавить в сабж.
Код:

  QScrollView* sv = new QScrollView( this );
  QVBox* vbox = new QVBox( sv->viewport() );
  sv->addChild(vbox);
  for ( int i=0; i < 100; i++ )
    QLabel* child = new QLabel( QString("CHILD%1").arg(i), vbox );
Записан
Evgeniy N. Sharapov
Гость
« Ответ #4 : Февраль 24, 2005, 22:49 »

Так и деляю...
Код:

       ......
        self._main = QVBoxLayout(self,7,5)
        self._main.addSpacing(8)
        self._scroll = QScrollView(self)
        self._scroll.setHScrollBarMode(QScrollView.AlwaysOff)
        self._scroll.setVScrollBarMode(QScrollView.Auto)
        self._main.addWidget(self._scroll)
        for each in self._scroll.viewport().children():
            if not isinstance(each,QGridLayout):
                self._scroll.viewport().removeChild(each)
        # calculating number of rows and cols for certain object
        props = SomeObject.properties()
        r,c= dcops.utils.getProductComponents(len(props))
        self._grid = QGridLayout(self._scroll.viewport(),r,c,5,5)
        self._grid.setAutoAdd(True)
        for prop in props:
             w = TProperty(self._scroll.viewport(),'',prop.title(),property_type_map[prop.type()],prop.value())
             w.show()
             self._scroll.addChild(w)
            self._scroll.resizeContents(self._grid.sizeHint().width(),self._grid.sizeHint().height())

....        


НО... Опять же у меня постоянно этот элемент предковый должен менятся... То есть.. В зависимости от событий в нем должны оказываться разные виджеты... Стаком делать нельзя.. (так как событий внешних много и хранить в памяти все раскладки глупо)...
Проблема в том, что у меня неадекватно видет себя скроллвью... То есть во время пересоздания - перестает скроллится... Либо элементы фигово располагаются... Я удаляю виджеты перед прорисовкой нового вьюпорта.. Но тогда он перестает скролится... Не знаю куда и копать...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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