Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: daimon от Май 10, 2012, 19:48



Название: QMdiSubWindow не ловит изменение размера внутреннего виджета
Отправлено: 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 скрин




Название: Re: QMdiSubWindow не ловит изменение размера внутреннего виджета
Отправлено: daimon от Май 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 описан через дизайнер и там применён ко всему виджету лейаут


Название: Re: QMdiSubWindow не ловит изменение размера внутреннего виджета
Отправлено: navrocky от Май 10, 2012, 23:11
попробуй QWidget::updateGeometry() позвать


Название: Re: QMdiSubWindow не ловит изменение размера внутреннего виджета
Отправлено: daimon от Май 10, 2012, 23:39
попробуй QWidget::updateGeometry() позвать

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

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

не помогает всё равно


Название: Re: QMdiSubWindow не ловит изменение размера внутреннего виджета
Отправлено: twp от Май 10, 2012, 23:56
можешь еще попробовать void QWidget::adjustSize(), но не факт что поможет


Название: Re: QMdiSubWindow не ловит изменение размера внутреннего виджета
Отправлено: daimon от Май 11, 2012, 00:08
можешь еще попробовать void QWidget::adjustSize(), но не факт что поможет
сработало, вот только теперь нужно придумать систему, когда вызывать этот метод

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


Название: Re: QMdiSubWindow не ловит изменение размера внутреннего виджета
Отправлено: daimon от Май 11, 2012, 00:32
и тут сразу проблема - развернул на весь экран, но окно возвращается в старый размер, когда есть сигнал modified, , думаю это делает функция adjustSize()


Название: Re: QMdiSubWindow не ловит изменение размера внутреннего виджета
Отправлено: twp от Май 11, 2012, 13:48
ну значит надо изменить саму логику программы, чтоб не срабатывал adjustSize при ресайзе


Название: Re: QMdiSubWindow не ловит изменение размера внутреннего виджета
Отправлено: daimon от Май 11, 2012, 19:57
ну значит надо изменить саму логику программы, чтоб не срабатывал adjustSize при ресайзе
в том то и дело, что по другому не получается решить мою самою главную проблему - прям баг кютэ