Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: RoulanD от Апрель 17, 2011, 07:35



Название: [Решено]Плавный ресайз в QScrollArea
Отправлено: RoulanD от Апрель 17, 2011, 07:35
Здравствуйте. Проблема следующая:
У меня есть QScrollArea в нём компоновка горизонтальная, в компоновке 3 кнопки и horizontalSpacer на MinimumExpanding. Нужно следующее: при изменении width например первой кнопки, все остальные виджеты в компоновке сдвигались.  То есть если первая кнопка увеличилась в ширине на 20 пиксилей, например, то оставшиеся 2 кнопки и horizontalSpacer сдвинулись на 20 пикселей по оси Х.


Название: Re: Плавный ресайз в QScrollArea
Отправлено: blood_shadow от Апрель 17, 2011, 10:44
Здравствуйте. Проблема следующая:
У меня есть QScrollArea в нём компоновка горизонтальная, в компоновке 3 кнопки и horizontalSpacer на MinimumExpanding. Нужно следующее: при изменении width например первой кнопки, все остальные виджеты в компоновке сдвигались.  То есть если первая кнопка увеличилась в ширине на 20 пиксилей, например, то оставшиеся 2 кнопки и horizontalSpacer сдвинулись на 20 пикселей по оси Х.

поставь горизонтальную политику размера кнопок и спайсера на Fixed


Название: Re: Плавный ресайз в QScrollArea
Отправлено: RoulanD от Апрель 17, 2011, 11:23
ставил.
И прошу, если кто то что то советует то попробуйте сначала это сами.


Название: Re: Плавный ресайз в QScrollArea
Отправлено: blood_shadow от Апрель 17, 2011, 14:03
ставил.
И прошу, если кто то что то советует то попробуйте сначала это сами.
тогда давай форму, за тебя тут никто не будет задачи разбирать и решать


Название: Re: Плавный ресайз в QScrollArea
Отправлено: RoulanD от Апрель 17, 2011, 16:54
1 - форма
2 - изначально
3 - после увеличения размера 1 кнопки она заползает на остальные, несмотря на компоновку. (компоновку сделал внутри scrollArea)


Название: Re: Плавный ресайз в QScrollArea
Отправлено: blood_shadow от Апрель 17, 2011, 17:11
вот так?:
(http://i.pixs.ru/storage/2/7/1/22PNG_7578385_2048271.png)


Название: Re: Плавный ресайз в QScrollArea
Отправлено: RoulanD от Апрель 17, 2011, 19:55
ну да вот они должны так сдвигаться


Название: Re: Плавный ресайз в QScrollArea
Отправлено: blood_shadow от Апрель 17, 2011, 20:00
ну да вот они должны так сдвигаться
кнопки горизонтальная политика все - Minimum, распорка - Expanding и все это скомпоновано по горизонтали


Название: Re: Плавный ресайз в QScrollArea
Отправлено: RoulanD от Апрель 17, 2011, 20:02
при изменении размера она всё равно накладывается на другую кнопку.


Название: Re: Плавный ресайз в QScrollArea
Отправлено: blood_shadow от Апрель 17, 2011, 20:09
при изменении размера она всё равно накладывается на другую кнопку.
я предполагаю что у распорки стоит минимальный размер меньше которого она не может
стать, если же нет прикрепи файл *.ui сюда я посмотрю


Название: Re: Плавный ресайз в QScrollArea
Отправлено: RoulanD от Апрель 17, 2011, 20:11
у спейсера стоит размер 1х1


Название: Re: Плавный ресайз в QScrollArea
Отправлено: blood_shadow от Апрель 17, 2011, 22:01
у спейсера стоит размер 1х1
минимальный размер твоей кнопки устанавливал на +20 вроде работает, остальные кнопки
поставил на фиксед, спейсер на 40*20


Название: Re: Плавный ресайз в QScrollArea
Отправлено: RoulanD от Апрель 18, 2011, 04:22
Ты вроде не понял. Я, например, на 1 кнопку делаю сигнал кликт.
Код
C++ (Qt)
void MainWindow::on_pushButton_clicked()
{
   ui->pushButton->setGeometry(ui->pushButton->x(),
                               ui->pushButton->y(),
                               ui->pushButton->width()+10,
                               ui->pushButton->height());
}
 
И при запуске программы, когда я увеличиваю размер кнопки этим слотом, она у меня на другие виджеты налазит. Мне вот от этого нужно избавиться.


Название: Re: Плавный ресайз в QScrollArea
Отправлено: blood_shadow от Апрель 18, 2011, 10:07
Ты вроде не понял. Я, например, на 1 кнопку делаю сигнал кликт.
Код
C++ (Qt)
void MainWindow::on_pushButton_clicked()
{
   ui->pushButton->setGeometry(ui->pushButton->x(),
                               ui->pushButton->y(),
                               ui->pushButton->width()+10,
                               ui->pushButton->height());
}
 
И при запуске программы, когда я увеличиваю размер кнопки этим слотом, она у меня на другие виджеты налазит. Мне вот от этого нужно избавиться.
неправильно, ты делаешь
Код
C++ (Qt)
void MainWindow::on_pushButton_clicked()
{
   ui->pushButton->resize(ui->pushButton->size() + QSize(20, 0));
}
 


Название: Re: Плавный ресайз в QScrollArea
Отправлено: RoulanD от Апрель 18, 2011, 11:27
Ну дело не в этом, всё равно при изменении размера виджеты справа не сдвигаются, а кнопка накладывается на них.


Название: Re: Плавный ресайз в QScrollArea
Отправлено: blood_shadow от Апрель 18, 2011, 12:53
Ну дело не в этом, всё равно при изменении размера виджеты справа не сдвигаются, а кнопка накладывается на них.
давай тогда проект, а так я ума не приложу что у тебя там происходит


Название: Re: Плавный ресайз в QScrollArea
Отправлено: RoulanD от Апрель 18, 2011, 13:19
аррр =) Время нету, сейчас убегаю, мне нужно чтоб когда я кликаю на кнопку первую, её размер увеличивался, и не накладывался на остальные виджеты в компоновке, а двигал их.


Название: Re: Плавный ресайз в QScrollArea
Отправлено: Авварон от Апрель 18, 2011, 19:50
Ваша задача логически неверно построена. Если вы используете компоновщики, то за размер виджета отвечает компоновщик, а не виджет. Есть способы/ряд случаев когда можно безопасно менять размер виджета в лэйауте, но в большинстве своём это шаманизм и неверно по сути.


Название: Re: Плавный ресайз в QScrollArea
Отправлено: RoulanD от Апрель 18, 2011, 20:14
тем не менее проблема есть и её нужно решить =)
Был вариант отслеживать координаты по Х первой кнопки + её ширину и сравнивать с координатами по Х следующей кнопки, если больше до сдвигать все виджеты справа на столько же на сколько увеличилась первая кнопка =) (ужасно на словах что то понять=))
Но она не прижилась =)


Название: Re: Плавный ресайз в QScrollArea
Отправлено: RoulanD от Апрель 19, 2011, 19:19
Проблема решена. Всем спасибо.