您的位置:首页 > 编程语言 > Qt开发

QT-QMainWindow布局设置

2016-03-08 21:40 246 查看
参考文档:
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  转载请标明来源)


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: