QT-QMainWindow布局设置

参考文档:

http://blog.csdn.net/IAccepted/article/details/24426875

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu  转载请标明来源)


1. 问题:UI文件添加了布局layout没有占满整个界面

在开发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);


2. 解析:QMainWindows结构

从下面的基本定义可以看到:

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



3. 问题:如何删除QMainWindows上的菜单、工具栏、状态栏?


在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);


4. 建议:要善用对象查看器调整截面

在UI编辑的对象窗口(视图->对象查看器)中,有着布局layout的布局关系:

通过一层层的布局,实现了整体窗口的布局

在这个查看器中,可以方便的做一下几个事情

1. 查看布局关系

2. 找布局下的各个组件

3. 转换布局类型


5. SizePolicy说明

水平/垂直伸展:拉伸时的比例控制,例如填写1,则拉伸比例为 (1)/(1+...总和)

水平/垂直策略:当选为fixed时,可以使用minimusSize设置构建的固定大小值


另外,可以使用Horizental Spacer和Vertical Spacer协助调整位置


6. 问题:如何去掉启用、停用最大化按钮

选择窗体:设置maximumSize的宽高度不为16777215,最大化按钮就会消失

宽度16777215

高度16777215

同理,如果希望再出来,那就把值再设回去即可




7. 使用Spliter分割MainWindows窗口

方法:
a. 在窗口里面放置两个 widget容器,把窗口中的元素都分别放入到这两个里面,例如:ui.topWidget, ui.bottomWidget
b. 在MainWindows的 构造函数中,ui.setupUi(this)之后,新建一个spliter,把ui.topWidget/ui.bottomWidget放入到spliter
c. setCentralWidget为spliter
这样就生成了spliter窗口,窗口可以分割拖动了


(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu  转载请标明来源)



你可能感兴趣的:(QMainWindow布局设置)