Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Денис от Январь 20, 2015, 19:15



Название: [РЕШЕНО] QMainWindow с масштабированием ?
Отправлено: Денис от Январь 20, 2015, 19:15
Вопрос к знатокам как сделать QMainWindow масштабируемым ? Чтобы автоматически менялись и шрифты и и была привязка элементов к краям окна ? Пошарил в гугле ничего путевого не нашел ... Пишут мол надо несколько окон создать и переключаться между ними ... но как то не хотелось бы. Может можно подругому ?


Название: Re: QMainWindow с масштабированием ?
Отправлено: Денис от Январь 20, 2015, 22:37
Или есть ли возможность к главному окну подтянуть Scroll, чтобы уменьшив его по высоту можно было прокрутить содержимое ?


Название: Re: QMainWindow с масштабированием ?
Отправлено: gil9red от Январь 21, 2015, 07:33
Или есть ли возможность к главному окну подтянуть Scroll, чтобы уменьшив его по высоту можно было прокрутить содержимое ?

Тогда, QScrollArea (http://qt-project.org/doc/qt-4.8/qscrollarea.html)


Название: Re: QMainWindow с масштабированием ?
Отправлено: Денис от Январь 22, 2015, 21:26
Или есть ли возможность к главному окну подтянуть Scroll, чтобы уменьшив его по высоту можно было прокрутить содержимое ?

Тогда, QScrollArea (http://qt-project.org/doc/qt-4.8/qscrollarea.html)

А по другому как-то можно без скрола ?


Название: Re: QMainWindow с масштабированием ?
Отправлено: gil9red от Январь 22, 2015, 22:13
Или есть ли возможность к главному окну подтянуть Scroll, чтобы уменьшив его по высоту можно было прокрутить содержимое ?

Тогда, QScrollArea (http://qt-project.org/doc/qt-4.8/qscrollarea.html)

А по другому как-то можно без скрола ?

setHorizontalScrollBarPolicy ( Qt::ScrollBarPolicy )
setVerticalScrollBarPolicy ( Qt::ScrollBarPolicy )

http://qt-project.org/doc/qt-4.8/qt.html#ScrollBarPolicy-enum : Qt::ScrollBarAlwaysOff

Тогда QScrollArea будет без скролов


Название: Re: QMainWindow с масштабированием ?
Отправлено: Денис от Январь 26, 2015, 23:36
Или есть ли возможность к главному окну подтянуть Scroll, чтобы уменьшив его по высоту можно было прокрутить содержимое ?

Тогда, QScrollArea (http://qt-project.org/doc/qt-4.8/qscrollarea.html)

А по другому как-то можно без скрола ?

setHorizontalScrollBarPolicy ( Qt::ScrollBarPolicy )
setVerticalScrollBarPolicy ( Qt::ScrollBarPolicy )

http://qt-project.org/doc/qt-4.8/qt.html#ScrollBarPolicy-enum : Qt::ScrollBarAlwaysOff

Тогда QScrollArea будет без скролов

Хорошо а как QScrollArea установить на глвный виджет ?


Название: Re: QMainWindow с масштабированием ?
Отправлено: gil9red от Январь 27, 2015, 00:39
Или есть ли возможность к главному окну подтянуть Scroll, чтобы уменьшив его по высоту можно было прокрутить содержимое ?

Тогда, QScrollArea (http://qt-project.org/doc/qt-4.8/qscrollarea.html)

А по другому как-то можно без скрола ?

setHorizontalScrollBarPolicy ( Qt::ScrollBarPolicy )
setVerticalScrollBarPolicy ( Qt::ScrollBarPolicy )

http://qt-project.org/doc/qt-4.8/qt.html#ScrollBarPolicy-enum : Qt::ScrollBarAlwaysOff

Тогда QScrollArea будет без скролов

Хорошо а как QScrollArea установить на глвный виджет ?

QScrollArea * area = new QScrollArea();
mainWindow->setCentralWidget(area);


Название: Re: QMainWindow с масштабированием ?
Отправлено: Денис от Январь 27, 2015, 02:26
Или есть ли возможность к главному окну подтянуть Scroll, чтобы уменьшив его по высоту можно было прокрутить содержимое ?

Тогда, QScrollArea (http://qt-project.org/doc/qt-4.8/qscrollarea.html)

А по другому как-то можно без скрола ?

setHorizontalScrollBarPolicy ( Qt::ScrollBarPolicy )
setVerticalScrollBarPolicy ( Qt::ScrollBarPolicy )

http://qt-project.org/doc/qt-4.8/qt.html#ScrollBarPolicy-enum : Qt::ScrollBarAlwaysOff

Тогда QScrollArea будет без скролов

Хорошо а как QScrollArea установить на глвный виджет ?

QScrollArea * area = new QScrollArea();
mainWindow->setCentralWidget(area);


Я делаю в конструкторе класса вот так:

Код:
    QScrollArea *scrollArea = new QScrollArea();
    this->setCentralWidget(scrollArea);

И приложение у меня вылетает ... как правильно его добавить ? или не внутри конструктора надо это делать ? И можно ли это сделать через Qt Desiner ? Или только ручками надо прописывать ?


Название: Re: QMainWindow с масштабированием ?
Отправлено: gil9red от Январь 27, 2015, 07:09
Все в порядке с кодом.
Какая ошибки? Что отладчик показывает? Какие ос? Версия qt?
Если скините минимально компилябельный проект с вашей проблемой, то можно не гадать :)


Название: Re: QMainWindow с масштабированием ?
Отправлено: Денис от Январь 27, 2015, 22:29
Все в порядке с кодом.
Какая ошибки? Что отладчик показывает? Какие ос? Версия qt?
Если скините минимально компилябельный проект с вашей проблемой, то можно не гадать :)

Сильно много скидывать ... Ругается на выводимые элементы в ui с Qt Desiner-а ...
Если же сделать вот так:
Код:
    scrollArea = new QScrollArea();
    scrollArea -> setWidget(this->centralWidget());
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    setCentralWidget(scrollArea);
Не ругается но ничего не видно:
(http://s014.radikal.ru/i329/1501/39/951326dd67e9t.jpg) (http://radikal.ru/fp/544084a08f3340a682f2a0231bcad4ee)
С рисовалки ничего не выводится ... ругается именно на вывод ui->элементов в окно и ничего больше ... Что я сделал не так ?


Название: Re: QMainWindow с масштабированием ?
Отправлено: gil9red от Январь 27, 2015, 23:25
Все в порядке с кодом.
Какая ошибки? Что отладчик показывает? Какие ос? Версия qt?
Если скините минимально компилябельный проект с вашей проблемой, то можно не гадать :)

Сильно много скидывать ... Ругается на выводимые элементы в ui с Qt Desiner-а ...
Если же сделать вот так:
Код:
    scrollArea = new QScrollArea();
    scrollArea -> setWidget(this->centralWidget());
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    setCentralWidget(scrollArea);
Не ругается но ничего не видно:
(http://s014.radikal.ru/i329/1501/39/951326dd67e9t.jpg) (http://radikal.ru/fp/544084a08f3340a682f2a0231bcad4ee)
С рисовалки ничего не выводится ... ругается именно на вывод ui->элементов в окно и ничего больше ... Что я сделал не так ?

Забавно...

Сначала вы размещаете центральный виджет текущего окна на скролл зону: scrollArea -> setWidget(this->centralWidget());
Потом на тот центральный виджет, который был на скролл зоне, размещаете скролл зону, которая на самом деле его и содержит: setCentralWidget(scrollArea);
 :)


Название: Re: QMainWindow с масштабированием ?
Отправлено: Денис от Январь 27, 2015, 23:42
Все в порядке с кодом.
Какая ошибки? Что отладчик показывает? Какие ос? Версия qt?
Если скините минимально компилябельный проект с вашей проблемой, то можно не гадать :)

Сильно много скидывать ... Ругается на выводимые элементы в ui с Qt Desiner-а ...
Если же сделать вот так:
Код:
    scrollArea = new QScrollArea();
    scrollArea -> setWidget(this->centralWidget());
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    setCentralWidget(scrollArea);
Не ругается но ничего не видно:
(http://s014.radikal.ru/i329/1501/39/951326dd67e9t.jpg) (http://radikal.ru/fp/544084a08f3340a682f2a0231bcad4ee)
С рисовалки ничего не выводится ... ругается именно на вывод ui->элементов в окно и ничего больше ... Что я сделал не так ?

Забавно...

Сначала вы размещаете центральный виджет текущего окна на скролл зону: scrollArea -> setWidget(this->centralWidget());
Потом на тот центральный виджет, который был на скролл зоне, размещаете скролл зону, которая на самом деле его и содержит: setCentralWidget(scrollArea);
 :)

А если сделать следующим образом:
Код:
    scrollArea = new QScrollArea();
    scrollArea -> setWidget(this->centralWidget());
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    scrollArea->show();

Та даже если без show():
Код:
    scrollArea = new QScrollArea();
    scrollArea -> setWidget(this->centralWidget());
    scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);

Все равно на СкролАрие не хочет отображать ui. Может можно где-то почитать как правильно это сделать ?
(http://s017.radikal.ru/i439/1501/da/883d5ce9f14bt.jpg) (http://radikal.ru/fp/9dd90f6895b649d895bd03bcb338f323)


Название: Re: QMainWindow с масштабированием ?
Отправлено: gil9red от Январь 28, 2015, 05:37
Посмотрите, в архиве лежит пример создания формы и размещение centralWidget формы на QScrollArea.

А лучше бы вы рассказали, что хотите в итоге  ;)


Название: Re: QMainWindow с масштабированием ?
Отправлено: Денис от Январь 28, 2015, 09:54
Посмотрите, в архиве лежит пример создания формы и размещение centralWidget формы на QScrollArea.

А лучше бы вы рассказали, что хотите в итоге  ;)

Смотри происходит тоже самое:
(http://s014.radikal.ru/i328/1501/a3/d95d1abd4e09t.jpg) (http://radikal.ru/fp/b91be086a9544512a7edc75f9ccbbf6b)

Два окна вместо одного ... (
Версия Qt 5.3.0 ... блин как же его правильно собрать может быть надо еще какие то флаги у QMainWindow включить и они у различных версий разные ?


Название: Re: QMainWindow с масштабированием ?
Отправлено: gil9red от Январь 28, 2015, 10:55
Давайте я попытаюсь угадать, что вам нужно? :)
У вас формочка в ui, и вам нужно ее содержимое, то которое находится в centralWidget поместить на QScrollArea и, при этом, чтобы эта QScrollArea оказалась в форме? :)


Название: Re: QMainWindow с масштабированием ?
Отправлено: Денис от Январь 28, 2015, 12:07
Давайте я попытаюсь угадать, что вам нужно? :)
У вас формочка в ui, и вам нужно ее содержимое, то которое находится в centralWidget поместить на QScrollArea и, при этом, чтобы эта QScrollArea оказалась в форме? :)

Типа того только чтобы QScrollArea оказалась центральным виджетом а не отдельным виджетом формы


Название: Re: QMainWindow с масштабированием ?
Отправлено: gil9red от Январь 28, 2015, 12:42
Ну в дизейнере форм разместите QScrollArea на форму окна, а те виджеты, который были там раньше, разместите на QScrollArea

Не забудьте QScrollArea растянуть по окну и виджеты в ней :)


Название: Re: QMainWindow с масштабированием ?
Отправлено: Денис от Январь 28, 2015, 13:10
Ну в дизейнере форм разместите QScrollArea на форму окна, а те виджеты, который были там раньше, разместите на QScrollArea

Не забудьте QScrollArea растянуть по окну и виджеты в ней :)

Но полоса прокрутки все равно не появляется и если нижнюю границу окна поднять все равно скролл не появляется ?


Название: Re: QMainWindow с масштабированием ?
Отправлено: __Heaven__ от Январь 28, 2015, 13:19
widgetResizable поменяйте в свойствах QScrollArea


Название: Re: QMainWindow с масштабированием ?
Отправлено: Денис от Январь 30, 2015, 18:56
Спс получилось надо было еще Скрол Арию привязать по сетке к centralWidet-виджету и все ок !!!!!!!!