Звучит так, будто есть некоторые внутренние события Qt, которые необходимо распространить, прежде чем он узнает, что вы можете изменить размер главного окна.Если это так, то я могу подумать о двух возможных решениях:
Использование таймера одиночного броска в очереди для вызова кода, который изменяет размер вашего окна до 300px:
m_liner->hide();
QTimer::singleShot( 0, this, SLOT(resizeTo300px()) );
или послеВы скрываете свой виджет. Вы можете попробовать вызвать processEvents () (эта функция имеет потенциально опасные побочные эффекты, поэтому используйте ее с осторожностью):
m_liner->hide();
QApplication::processEvents();
resize( w, height() );
Другим потенциальным решением будет установка политики горизонтального размера вашеговиджет, который игнорируется при его скрытии:
m_liner->hide();
m_liner->setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Preferred );
resize( w, height() );
При повторном отображении виджета вам нужно будет снова настроить политику размеров.