292 / 204 / 46
Регистрация: 29.05.2018
Сообщений: 604
1

Автоматическое подгонка размеров окна на базе QWidget

12.08.2022, 12:57. Показов 622. Ответов 2
Метки нет (Все метки)

Добрый день.

Имеется нижеследующий код, выводящий в окно на базе QWidget три групбокса с таблвьюхами внутри и три кнопки, каждая из которых включает/выключает видимость групбокса.

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
 
Widget::Widget(QWidget* parent)
    : QWidget(parent)
{
    m_groupBox_1 = new QGroupBox(tr("View 1"), this);
    m_groupBox_2 = new QGroupBox(tr("View 2"), this);
    m_groupBox_3 = new QGroupBox(tr("View 3"), this);
 
    m_tableView_1 = new QTableView(m_groupBox_1);
    m_tableView_2 = new QTableView(m_groupBox_2);
    m_tableView_3 = new QTableView(m_groupBox_3);
 
    QVBoxLayout* view_1Layout = new QVBoxLayout;
    QVBoxLayout* view_2Layout = new QVBoxLayout;
    QVBoxLayout* view_3Layout = new QVBoxLayout;
 
    view_1Layout->addWidget(m_tableView_1);
    view_2Layout->addWidget(m_tableView_2);
    view_3Layout->addWidget(m_tableView_3);
 
    m_groupBox_1->setLayout(view_1Layout);
    m_groupBox_2->setLayout(view_2Layout);
    m_groupBox_3->setLayout(view_3Layout);
 
    QVBoxLayout* viewsLayout = new QVBoxLayout;
    viewsLayout->addWidget(m_groupBox_1);
    viewsLayout->addWidget(m_groupBox_2);
    viewsLayout->addWidget(m_groupBox_3);
    viewsLayout->addStretch(1);
 
    m_pushButton_1 = new QPushButton(tr("Show|hide view 1"), this);
    m_pushButton_2 = new QPushButton(tr("Show|hide view 2"), this);
    m_pushButton_3 = new QPushButton(tr("Show|hide view 3"), this);
 
    QVBoxLayout* buttonsLayout = new QVBoxLayout;
    buttonsLayout->addWidget(m_pushButton_1);
    buttonsLayout->addWidget(m_pushButton_2);
    buttonsLayout->addWidget(m_pushButton_3);
    buttonsLayout->addStretch(1);
 
    QHBoxLayout* mainLayout = new QHBoxLayout;
    mainLayout->addLayout(viewsLayout);
    mainLayout->addLayout(buttonsLayout);
    mainLayout->setSizeConstraint(QLayout::SetMinimumSize);
 
    setLayout(mainLayout);
 
    setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
 
    connect(m_pushButton_1, &QPushButton::clicked, this, &Widget::slotShowHideWidget_1);
    connect(m_pushButton_2, &QPushButton::clicked, this, &Widget::slotShowHideWidget_2);
    connect(m_pushButton_3, &QPushButton::clicked, this, &Widget::slotShowHideWidget_3);
}
 
Widget::~Widget()
{
 
}
 
void Widget::slotShowHideWidget_1()
{
    if(m_groupBox_1->isHidden())
    {
        m_groupBox_1->show();
    }
    else
    {
        m_groupBox_1->hide();
    }
 
    adjustSize();
}
 
void Widget::slotShowHideWidget_2()
{
    if(m_groupBox_2->isHidden())
    {
        m_groupBox_2->show();
    }
    else
    {
        m_groupBox_2->hide();
    }
 
    adjustSize();
}
 
void Widget::slotShowHideWidget_3()
{
    if(m_groupBox_3->isHidden())
    {
        m_groupBox_3->show();
    }
    else
    {
        m_groupBox_3->hide();
    }
 
    adjustSize();
}
На данный момент размеры окна уменьшаются (по вертикали) только при выключении двух групбоксов, то есть изменение размеров окна запаздывает на один шаг. Хотелось бы, чтобы при любом изменении количества виджетов окно меняло свои размеры и не имело пустот (при выключении виджетов), а также не включало полосы прокрутки (при включении виджетов).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2022, 12:57
Ответы с готовыми решениями:

QtDesigner: автоматическая подгонка размеров окна
У меня есть программа окно с 3 вкладками. На моём 1 ноуте размер программы нормальный, но на ноуте...

Подгонка размеров окна под текст
Доброго времени суток. Помогите пожалуйста, уже мозк кипит... Есть многострочный &quot;edit&quot;. По...

Автоматическое изменение расположения контролов при изменении размеров окна
Есть у меня Expander. Сам он находится в Grid c RowDefinition Height=&quot;Auto&quot;. В экспандере...

Подгонка размеров сайта
Скажите пожалуста, я создал сайт, но у разных пользователей разные настройки explorer и получается...

2
614 / 303 / 91
Регистрация: 30.03.2021
Сообщений: 1,072
12.08.2022, 20:06 2
Лучший ответ Сообщение было отмечено Ender Che как решение

Решение

Ender Che, пробовал решить, и как не извращался-под виджетами всегда остается пространство...(крутил и так, и сяк, и наперекосяк, вариантов 30 наверное перебрал)
Получается решить проблему если:
C++ (Qt)
1
    mainLayout->setSizeConstraint(QLayout::SetFixedSize);
но так окно теряет возможность ресайза мышкой...
Возможно, надо сабклассить QWidget ...

зы может быть пригодится, маленькое сокращение кода:
C++ (Qt)
1
    m_groupBox_1->setVisible(!m_groupBox_1->isVisible());
1
292 / 204 / 46
Регистрация: 29.05.2018
Сообщений: 604
12.08.2022, 20:42  [ТС] 3
Цитата Сообщение от sdf45 Посмотреть сообщение
но так окно теряет возможность ресайза мышкой...
А вот это чёрт с ним. Таблвьюхи от этого возможность прокрутки не теряют.
Цитата Сообщение от sdf45 Посмотреть сообщение
зы может быть пригодится, маленькое сокращение кода
О, отличное дополнение!

Спасибо, дорогой товарищ, за решение. Это то, что надо!
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2022, 20:42
Помогаю со студенческими работами здесь

Автоматическое изменение размеров компонентов при изменении размеров формы
Приветствую. Подскажите. Форма по умолчанию при запуске приложения открывается по центру. Если...

Автоматическое изменение размеров контролов в зависимости от размеров формы
Кто-нибудь может что-то сказать по этому поводу? Я имею ввиду как этого добиться наиболее простым...

самоличное восстановление размеров QWidget
Подскажите, с чем это связано и как с этим бороться... меняю размер окна, в событии resizeEvent...

Изменение размеров Image.Picture.LoadFromFile при изменении размеров окна
Подскажите, пожалуйста, какие функции для этого нужны.

Изменение размеров рисунка при изменении размеров области вывода (окна)
Нужно сделать так, что бы рисунок менял свой размер при изменении окна... unit Unit1; interface ...

Масштабирование размеров графика в Image при изменении размеров окна
Подскажите пожалуйста, как использовать масштабирование, у меня построен график в Image1, как...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru