http://blog.csdn.net/IAccepted/article/details/24426875
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)
在开发QT程序的过程中,当我们使用QMainWindows作为窗口主类的时候;
窗口的UI布局文件.ui编辑时:我们会看到一种现象---添加了布局layout没有占满整个界面
有两种方法可以解决这个问题:
第一种:自动创建布局---在UI编辑的对象窗口(视图->对象查看器)中
点击 根节点->”布局“->"xxx布局“,然后再调整窗体元素,这样就完成了布局,切所见即所得
第二种:手动设置布局---我们需要在代码中做这样一个操作:
在SetUi之后添加下面的方法,为ui.centralWidget设置ui中的layout
ui->setupUi(this); // 设置layout布满窗口,假设layout名称是m_horizontalLayout ui.centralWidget->setLayout(ui.m_horizontalLayout);
从下面的基本定义可以看到:
QMainWindows可能引用了:QDockWidget-停靠窗口, QMenuBar-菜单栏, QStartusBar-状态栏, QToolBar-工具栏, QMenu-菜单
class QDockWidget; class QMainWindowPrivate; class QMenuBar; class QStatusBar; class QToolBar; class QMenu; class Q_WIDGETS_EXPORT QMainWindow : public QWidget
在UI编辑的对象窗口(视图->对象查看器)中
点击主窗体,可以看到有MenuBar/ToolBar/StatusBar
解决方法:删除这些就可以去掉了
扩展说明:
因为有了MenuBar/ToolBar/StatusBar这些的存在,在自动生成的ui_xxx.h文件中的setupUI方法可以看到:
QMainWindows下面方法均被调用
setCentralWidget -- 设置主页面
setMenuBar - 设置菜单
addToolBar - 设置工具栏
setStatusBar - 设置状态栏
MainWindow->setCentralWidget(centralWidget); menuBar = new QMenuBar(MainWindow); menuBar->setObjectName(QStringLiteral("menuBar")); menuBar->setGeometry(QRect(0, 0, 400, 23)); MainWindow->setMenuBar(menuBar); mainToolBar = new QToolBar(MainWindow); mainToolBar->setObjectName(QStringLiteral("mainToolBar")); MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar); statusBar = new QStatusBar(MainWindow); statusBar->setObjectName(QStringLiteral("statusBar")); MainWindow->setStatusBar(statusBar);
在UI编辑的对象窗口(视图->对象查看器)中,有着布局layout的布局关系:
通过一层层的布局,实现了整体窗口的布局
在这个查看器中,可以方便的做一下几个事情
1. 查看布局关系
2. 找布局下的各个组件
3. 转换布局类型
水平/垂直策略:当选为fixed时,可以使用minimusSize设置构建的固定大小值
另外,可以使用Horizental Spacer和Vertical Spacer协助调整位置
选择窗体:设置maximumSize的宽高度不为16777215,最大化按钮就会消失
宽度16777215
高度16777215
同理,如果希望再出来,那就把值再设回去即可