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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMdiSubWindow не ловит изменение размера внутреннего виджета  (Прочитано 5383 раз)
daimon
Гость
« : Май 10, 2012, 19:48 »

суть проблемы такая:
- есть сабокно mdi области, в ней весит виджета на вертикальном лейауте
- внутренний виджет состоит из других виджетов, тоже на лейаутах

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

Код
C++ (Qt)
MdiChild::MdiChild(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
   setAttribute(Qt::WA_DeleteOnClose);
   isUntitled = true;
 
QVBoxLayout *verticalLayout = new QVBoxLayout(this);
verticalLayout->addWidget(new TabWidget(this));
}
////////////////
MdiChild * MainWindow::createMdiChild()
{
MdiChild *child = new MdiChild(ui.mdiArea);
ui.mdiArea->addSubWindow(child);
 
return child;
}
 

может сигнал как-то ловить от внутреннего виджета и делать обновление сабокна?

создаю сабокно - 1 скрин
создаю вкладку на табвиджете - 2 скрин
пытаюсь ресайзить сабокно, принимает сразу минимальный положеный размер - 3 скрин


« Последнее редактирование: Май 10, 2012, 20:44 от daimon » Записан
daimon
Гость
« Ответ #1 : Май 10, 2012, 21:00 »

решил упростить и убрать один промежуточный виджет
Код
C++ (Qt)
void MainWindow::on_actionNew_triggered()
{
TabWidget *tabWidget = new TabWidget(this);
QMdiSubWindow* subWindow = ui.mdiArea->addSubWindow(tabWidget);
tabWidget->show();
}

толку нет, тоже самое
TabWidget описан через дизайнер и там применён ко всему виджету лейаут
« Последнее редактирование: Май 10, 2012, 21:48 от daimon » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #2 : Май 10, 2012, 23:11 »

попробуй QWidget::updateGeometry() позвать
Записан

Гугль в помощь
daimon
Гость
« Ответ #3 : Май 10, 2012, 23:39 »

попробуй QWidget::updateGeometry() позвать

повесил на один екшн

Код
C++ (Qt)
void MainWindow::on_actionClose_triggered()
{
//activeMdiChild()->close();
qDebug()<<ui.mdiArea->activeSubWindow();
ui.mdiArea->activeSubWindow()->updateGeometry();
 
 
}

не помогает всё равно
Записан
twp
Гость
« Ответ #4 : Май 10, 2012, 23:56 »

можешь еще попробовать void QWidget::adjustSize(), но не факт что поможет
Записан
daimon
Гость
« Ответ #5 : Май 11, 2012, 00:08 »

можешь еще попробовать void QWidget::adjustSize(), но не факт что поможет
сработало, вот только теперь нужно придумать систему, когда вызывать этот метод

я разработал сквозные сигналы modified() - на добавление таба, на удаление таба, на изменение списка внутреннего виджета таба (они передаются из самого нижнего виджета к самому верхнему), может к ним вязать?
« Последнее редактирование: Май 11, 2012, 00:11 от daimon » Записан
daimon
Гость
« Ответ #6 : Май 11, 2012, 00:32 »

и тут сразу проблема - развернул на весь экран, но окно возвращается в старый размер, когда есть сигнал modified, , думаю это делает функция adjustSize()
« Последнее редактирование: Май 11, 2012, 00:34 от daimon » Записан
twp
Гость
« Ответ #7 : Май 11, 2012, 13:48 »

ну значит надо изменить саму логику программы, чтоб не срабатывал adjustSize при ресайзе
Записан
daimon
Гость
« Ответ #8 : Май 11, 2012, 19:57 »

ну значит надо изменить саму логику программы, чтоб не срабатывал adjustSize при ресайзе
в том то и дело, что по другому не получается решить мою самою главную проблему - прям баг кютэ
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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