我是靠谱客的博主 唠叨耳机,最近开发中收集的这篇文章主要介绍QMainWindow中不可以直接添加LayOut,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

QMainWindow中不可以直接添加LayOut

  今天写项目时遇到一个奇怪的问题,QMainWindow 中直接setLayout() 布局无效或者直接显示异常。
  很奇怪,QMainWindow 是继承自QWidget的,是拥有布局能力的,为什么会出现这样的问题呢?

  我是这样操作的,

  首先,新建的工程窗体选的是QMainWindow。接着,直接在代码中new出控件对象,然后添加到layout中了,最后在 setLayout()的时候,发现界面显示的效果和预期不一样

  这是为什么呢?

  先来看看官方文档,关于setLayout()的描述:

If there already is a layout manager installed on this widget, QWidget won’t let you install another. You must first delete the existing layout manager (returned by layout()) before you can call setLayout() with the new layout.

如果此Widget上已经安装了布局管理器,QWidget将不允许您安装其他布局管理器。必须先删除现有布局管理器(由layout() 返回),然后才能使用新布局调用setLayout()。

  此段话说明了如果QWidget已经拥有了布局,就不能再设置另一个布局了。

  看来问题就在这里,基于主窗口的程序,可以已经默认有了自己的布局管理器。也就是说QMainWindow一定已经拥有了自己的布局,才导致新设置的布局不起作用。

  那怎么办呢?

  很好处理,QMainWindow 可以通过setCentralWidget设置一个中心控件QWidget。通过在中心部件中设置布局,就可以正常显示了。

代码如下

QWidget *widget = new QWidget();
QHBoxLayout *mainLayout = new QHBoxLayout(widget);
this->setCentralWidget(widget);

注意: 官方文档也有说明, 必须得有一个中心控件。

Note: Creating a main window without a central widget is not supported. You must have a central widget even if it is just a placeholder.

注意: 不支持创建一个没有中心布局的主窗口。你必须拥有一个中心部件,即使它只是充当占位符的作用。

下图为官方文档中的QMainWindow窗口结构图,以供参考。
在这里插入图片描述

所以,只要创建一个中心部件,再使用布局才是没有问题的。

最后

以上就是唠叨耳机为你收集整理的QMainWindow中不可以直接添加LayOut的全部内容,希望文章能够帮你解决QMainWindow中不可以直接添加LayOut所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部