Как удалить пробел (поле) между QMainWindow и mdiArea?

#c #qt #qt5

#c #qt #qt5

Вопрос:

У меня есть QMainWindow и я вставил mdiArea в главное окно.
Сначала вы должны увидеть следующее изображение:

Как вы видели, серая область mdiArea и пробелы (поля) между главным окном и mdiArea являются тем, что я хочу удалить.
Я использовал setContentsMargins функцию, но ничего не делает.

Как я могу удалить эти пробелы?

Я хочу быть похожим на следующее изображение: введите описание изображения здесь

Ответ №1:

QMainWindow имеет центральный виджет с макетом. Макет, который вы используете в QMainWindow is, должен использоваться вместо его центрального виджета. Следовательно, вы должны вызвать

QWidget* QMainWindow::centralWidget() Первый,

таким образом, вы можете сначала получить центральный виджет, а затем использовать

void QLayout::setContentsMargins(int left, int top, int right, int bottom)

чтобы настроить его макет. Приведенная ниже диаграмма взята из документации Qt.

введите описание изображения здесь
введите описание изображения здесь

Создание главного окна без центрального виджета не поддерживается. У вас должен быть центральный виджет, даже если это просто заполнитель.


Например, у вас может быть следующее в QMainWindow конструкторе:

 centralWidget()->layout()->setContentsMargins(0, 0, 0, 0);
statusBar()->hide();
ui->mainToolBar->hide();
  

введите описание изображения здесь

Строка состояния и панель инструментов были скрыты, чтобы удалить как можно больше пустого пространства.

Комментарии:

1. Я написал этот код в конструкторе MainWindow. но, к сожалению, по-прежнему не хочет удалять пробелы.

2. @LionKing Что значит «не хочет удалять пробелы»? Разве это не то, чего вы хотите?

3. @LionKing ХОРОШО, я отредактировал свой пост, сначала нужно вызвать centralWidget и получить его макет.

4. Да, это все. но не могли бы вы, пожалуйста, что это значит central widget ?

5. @LionKing Это базовый виджет QMainWindow, я обновлю сообщение и предоставлю подробную информацию через минуту.