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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QDialog + QScrollArea = lubofff. how get it  (Прочитано 3979 раз)
thechicho
Гость
« : Ноябрь 13, 2011, 23:05 »

Код
C++ (Qt)
       QWidget *widget = new QWidget(dialog);
       widget->setLayout(layout);
 
//        widget->setMinimumSize(100, 100);
//        widget->setMaximumSize(800, 600);
 
       QScrollArea *scrollArea = new QScrollArea(dialog);
       scrollArea->setWidget(widget);
       QHBoxLayout *dialog_layout = new QHBoxLayout(dialog);
       dialog_layout->addWidget(scrollArea);
 
       dialog->setLayout(dialog_layout);
       //dialog->setLayout(layout);
//        dialog->setMinimumSize(100, 100);
//        dialog->setMaximumSize(333, 800);
       dialog->exec();

динамически будут добавляться элементы в QGridLayout /* layout в коде выше */. надо, чтобы диалог подстраивался под их размер. проблема в том, что элементов может быть вставлено довольно много. соответственно они влезать на экран не будут. как сделать, чтоб, когда элементы не будут влезать в окно, появились полосы прокрутки и элементы разместились в QScrollArea.

в коде выше задается (не мной) фиксированная ширина (высота может изменяться). я не догоняю, как сделать, чтобы подстраивалось под контент до момента, пока не заполнено все окно, затем нужен scrollbar.
хелп.
Записан
grin
Гость
« Ответ #1 : Ноябрь 14, 2011, 00:02 »

Я так понимаю тебе нужно примерно следующее:

Код
C++ (Qt)
       QScrollArea*scrollArea = new QScrollArea;
       scrollArea->setWidgetResizable(true);
       scrollArea->setWidget(content_widget);
 

Конкретнее тут: http://doc.qt.nokia.com/latest/qscrollarea.html#widgetResizable-prop
Записан
thechicho
Гость
« Ответ #2 : Ноябрь 14, 2011, 12:11 »

я не понимаю!
делаю scrollArea->setWidgetResizable(true);
но не подстраивается под контент!!!

как сделать, чтобы виджет растягивался под контент пока не заполнится все окно???
я уже несколько часов голову ломаю, хелп  Грустный
Записан
thechicho
Гость
« Ответ #3 : Ноябрь 14, 2011, 12:31 »

Код
C++ (Qt)
       QMainWindow *window = new QMainWindow(this);
       window->setAttribute(Qt::WA_DeleteOnClose);
       QScrollArea *scrollArea = new QScrollArea(window);
       QWidget *widget = new QWidget(scrollArea);
       QGridLayout *layout = new QGridLayout(widget);
 
       qDebug() << "LAYOUT SIZEHINT: " << layout->sizeHint();
 
       widget->setLayout(layout);
       qDebug() << "WIDGET SIZE: " << widget->size();
       qDebug() << "WIDGET SIZEHINT: " << widget->sizeHint();
 
       qDebug() << "SCROLLAREA SIZE DO: " << scrollArea->size();
       qDebug() << "SCROLLAREA SIZEHINT POSLE: " << scrollArea->sizeHint();
 
       scrollArea->setWidgetResizable(true);
       scrollArea->setBackgroundRole(QPalette::Dark);
       qDebug() << "SCROLL AREA DO MINIMUM: " << scrollArea->minimumSize();
       qDebug() << "SCROLL AREA DO MAXIMUM: " << scrollArea->maximumSize();
       scrollArea->setWidget(widget);
       qDebug() << "SCROLL AREA POSLE MINIMUM: " << scrollArea->minimumSize();
       qDebug() << "SCROLL AREA POSLE MAXIMUM: " << scrollArea->maximumSize();
 
       qDebug() << "SCROLLAREA SIZE POSLE: " << scrollArea->size();
       qDebug() << "SCROLLAREA SIZEHINT POSLE: " << scrollArea->sizeHint();
 
       window->setCentralWidget(scrollArea);
 
       qDebug() << "WINDOW SIZE: " << window->size();
       qDebug() << "WINDOW SIZEHINT: " <<window->sizeHint();


LAYOUT SIZEHINT:  QSize(867, 456)
WIDGET SIZE:  QSize(100, 30)
WIDGET SIZEHINT:  QSize(867, 456)
SCROLLAREA SIZE DO:  QSize(100, 30)
SCROLLAREA SIZEHINT DO: QSize(158, 106)
SCROLL AREA DO MINIMUM:  QSize(0, 0)
SCROLL AREA DO MAXIMUM:  QSize(16777215, 16777215)
SCROLL AREA POSLE MINIMUM:  QSize(0, 0)
SCROLL AREA POSLE MAXIMUM:  QSize(16777215, 16777215)
SCROLLAREA SIZE POSLE:  QSize(100, 30)
SCROLLAREA SIZEHINT POSLE:  QSize(468, 312)
WINDOW SIZE:  QSize(100, 30)
WINDOW SIZEHINT:  QSize(468, 312)

QDialog заменил на QMainWindow.
нужно чтобы размер window подстраивался под контент, а он получается фиксированным!!! (WINDOW SIZEHINT:  QSize(468, 312) ) почему?
надо, чтобы LAYOUT SIZEHINT:  QSize(867, 456) = WINDOW SIZEHINT:  QSize(468, 312)
как это можно добиться?!
Записан
thechicho
Гость
« Ответ #4 : Ноябрь 14, 2011, 15:27 »

Код
C++ (Qt)
       QMainWindow *window = new QMainWindow(this);
       window->setAttribute(Qt::WA_DeleteOnClose);
       QScrollArea *scrollArea = new QScrollArea(window);
       QWidget *widget = new QWidget(scrollArea);
       QGridLayout *layout = new QGridLayout(widget);
       QDesktopWidget desktopWidget;
       int desktopWidth = desktopWidget.width();
       int desktopHeight = desktopWidget.height();
 
       widget->setLayout(layout);
 
       //scrollArea->setBackgroundRole(QPalette::Dark);
 
       if (widget->sizeHint().height() >= desktopHeight) {
           scrollArea->setMinimumSize(800, 450);
       } else {
           scrollArea->setMinimumSize(widget->sizeHint().width()+10, widget->sizeHint().height()+10);
       }
       scrollArea->setMaximumSize(desktopWidth, desktopHeight);
 
       scrollArea->setWidget(widget);
 
       window->setCentralWidget(scrollArea);
       window->move(0, 0);
       if (widget->sizeHint().height() >= desktopHeight) {
           window->showMaximized();
       }
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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