Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
 Аватар для Drus
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203

QWidget resize to layout, после SetFixedSize

15.11.2012, 12:42. Показов 4798. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно как его(внутренний виджет) заставить после задания максимальной ширины большей, чем размер родительского окна, стать прежнего размера, занимая все свободное пространство.

Виджет отказывается сжиматься в меньшую сторону

если вопрос не понятен и нужен код - запощу

Добавлено через 3 минуты
П.С. о решении использовать везде вместо SetFixed setMaximum/Minimum знаю, просто написал в надежде что есть функция, приводящая виджет к прежнему состоянию
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2012, 12:42
Ответы с готовыми решениями:

Как связать QWidget* w = new QWidget(this) с файлом формы UI ?
Ну вопрос в сабже. Создал простую форму без класса. В коде применяется QGraphicsProxyWidget, у которого можно вытащить указатель на...

Как открыть QWidget из QWidget по нажатию кнопки
Здравствуйте! Подскажите как открыть по нажатию QPushButton еще один QWidget в нижеприведенном коде появляется окно и сразу уничтожается,...

Теория. Почему в данном случае copy() не работает после reserve(), но работает после resize()?
Есть такая функция: void Array::SetStartIndexes(sz3_Arr_t *array) { start_index.reserve(array->size()); ...

4
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
15.11.2012, 12:42
перед тем как задаешь его размер проверять размер родителя и уже смотреть что больше а что меньше и на этом основании уже применять размер к виджету
0
 Аватар для Drus
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
15.11.2012, 12:49  [ТС]
полноэкранное окошко пользователь может уменьшить до нужного размера и будет шляпа, даже если проверку делать.
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
15.11.2012, 13:15
значит тебе надо в момент ресайза формы изменять размеры виджета, в чем проблема? Почему просто не добавить все в layot-ы что бы все это автоматом делалалось ?
0
 Аватар для Drus
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
15.11.2012, 13:55  [ТС]
ну тут проблемы(с добавлением в слой) нет, есть решение написанное выше, мне оно просто не нравится почему-то.

Внутри родительского виджета находятся еще несколько, только один из которых в в состоянии show, но при нажатии на иконку "отобразить какой-либо еще", видимым становится еще 1 виджет, однако предварительно ему задаются параметры setMaximumSize(0),далее, условно:

C++
1
2
3
4
while(sleep(30)){
widget_old.set_size(widget_old.size() - 1);
widget_new.set_size(widget_new.size() + 1);
}
пока старый виджет не пропадет(наверное похоже на корявую реализацию нескольких рабочих столов, правда внутри виджета)
вот тут начинаются пляски с бубном, если в момент "анимации" юзверю вздумалось менять размер окна и т.д..
пока просто сделал что бы никакие из параметров анимации не сбивались и все завершалось, по завершении виджету присваивается новое значение максимальных размеров, опять условно:
C++
1
setMaximumSize(::parent.size().width())
после чего он как раз принимает оптимальный для него размер

в коде:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
void Basic_scroll_area::animate(QWidget* need_show){
    if(!animation_locker.tryLock()){
        return;
    }
 
    QWidget* need_hide = NULL;
    for(int i = 0; i < inners_widgets.size(); i++){
        if(!inners_widgets.at(i)->isHidden()){
            need_hide = inners_widgets.at(i);
        }
    }
    if(need_hide == need_show){
        animation_locker.unlock();
        return;
    }
    need_show->setMaximumWidth(0);
    need_show->show();
 
    animation_pair.need_show = need_show;
    animation_pair.need_hide = need_hide;
    animation_timer.start(30);
}
 
void Basic_scroll_area::resizeEvent(QResizeEvent *event){
    QGroupBox::resizeEvent(event);
    if(!animation_locker.tryLock()){
        return;
    }
    for(int i = 0; i < inners_widgets.size(); i++){
        if(!inners_widgets.at(i)->isHidden()){
            this->layout()->update();
            inners_widgets.at(i)->setMaximumWidth(this->size().width());
            inners_widgets.at(i)->update();
        }
    }
    animation_locker.unlock();
}
 
void Basic_scroll_area::animation_process(){
    int offset = animation_pair.need_hide->size().width() * 0.12 + 12;
    int one = animation_pair.need_hide->width() - offset;
    int two = animation_pair.need_show->width() + offset;
 
    if(one < 0){
        one = 0;
    }
 
    if(two < 0){
        two = 0;
    }
 
    animation_pair.need_hide->setMaximumWidth(one);
    animation_pair.need_show->setMaximumWidth(two);
    if(animation_pair.need_hide->size().width() != 0){
        animation_timer.start(30);
    } else {
        animation_pair.need_hide->hide();
        animation_pair.need_show->setMaximumWidth(this->size().width());
        animation_timer.stop();
        animation_pair.need_hide = NULL;
        animation_pair.need_show = NULL;
        animation_locker.unlock();
    }
}
вам данный код никакое порно не напоминает? если нет - то и вопросов нет

Добавлено через 13 минут
C++ (Qt)
1
2
3
4
5
    if(two < 0){
        two = 0;
    }
this->layout()->update();
inners_widgets.at(i)->update();
мусор
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.11.2012, 13:55
Помогаю со студенческими работами здесь

Расположение контролов на форме после resize
Набор контролов ставлю на форму по середине. После ресайза контролы остаются в правом верхнем углу из-за Анкора. Анкор ставил вправо влево ...

После unwrap/wrap перестает работать resize
Имеется checkbox, который обернут в div с рамкой (см. рис. внизу). Ширина этого div меняется при изменении ширины браузера. При снятии...

Создание QWidget внутри QWidget
Есть окно QWidget, в котором есть кнопка. При нажатии на кнопку вызывается метод, который создает QWidget, как потомка 1-ого QWidget, и...

PyQt5 setFixedSize
Приветствую! Поясните начинающему Qt-шнику: обстановка: Win7 x64, Python 3.5, PyQt 5 import sys from PyQt5.QtWidgets import...

How can I resize all controls or just resize the space between them?
Hi. How can I resize all controls or just resize the space between them, when the form is resized in the runtime? Thanx in advance


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru