工具栏
工具栏是应用程序中集成各种功能实现快捷键使用的⼀个区域。
创建工具栏
工具栏与菜单栏不同,并不会自动创建,需要手动去创建出来并添加到窗口里。
QToolBar *toolBar = new QToolBar();
this->addToolBar(toolBar);
刚创建出来的工具栏是空白的,可以往里面添加一下菜单项。
// 创建两个菜单项
QAction* action1 = new QAction("保存");
QAction* action2 = new QAction("打开");
// 添加菜单项到工具栏
toolBar->addAction(action1);
toolBar->addAction(action2);
同样的这些菜单项都是可以点击的并可以编写槽函数。
一般来说工具栏都不会直接以文字的形式呈现,而是会以图片的形式呈现,所以可以给菜单项设置图标
// 给菜单项添加图标
action1->setIcon(QIcon(":/img/save.png"));
action2->setIcon(QIcon(":/img/open.png"));
停靠位置
工具栏可以停在上下左右四个位置,并且可以设置初始的位置。
在 addToolBar 函数中的第一个参数可以指定位置:
- Qt::LeftToolBarArea:左侧
- Qt::RightToolBarArea:右侧
- Qt::TopToolBarArea:顶部
- Qt::BottomToolBarArea:底部
// 创建四个工具栏
QToolBar *toolBar1 = new QToolBar();
QToolBar *toolBar2 = new QToolBar();
QToolBar *toolBar3 = new QToolBar();
QToolBar *toolBar4 = new QToolBar();
this->addToolBar(Qt::LeftToolBarArea, toolBar1); // 左
this->addToolBar(Qt::RightToolBarArea, toolBar2); // 右
this->addToolBar(Qt::TopToolBarArea, toolBar3); // 上
this->addToolBar(Qt::BottomToolBarArea, toolBar4); // 下
// 创建四个菜单项
QAction* action1 = new QAction("保存1");
QAction* action2 = new QAction("保存2");
QAction* action3 = new QAction("保存3");
QAction* action4 = new QAction("保存4");
// 分别添加菜单项到工具栏
toolBar1->addAction(action1);
toolBar2->addAction(action2);
toolBar3->addAction(action3);
toolBar4->addAction(action4);
因为工具栏默认是可以移动的,因此工具栏可以被拖动到别的位置停靠。
这时就可以有需求工具栏只能停在某些位置,就可以使用 setAllowedAreas 函数设置只能在某个位置停靠
// 设置工具栏只允许在左侧和右侧停靠
toolBar1->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
浮动性与移动
工具栏默认时开启可浮动的
可以通过 setFloatable 函数设置浮动性,例如:
// 关闭浮动
toolBar1->setFloatable(false);
关闭了浮动性之后,工具栏没有拖动到可停靠位置的话就会自动回到停靠位置
除了可浮动外,有些场景还会将工具栏固定式,也就是不能移动
// 设置不可移动
toolBar1->setMovable(false);
注意看,设置了不可移动之后,工具栏上的几个小点就会消失不见。
状态栏
状态栏是应用程序中输出简要信息的区域
创建状态栏并显示消息
// 存在就获取, 不存在就创建
QStatusBar* statusBar = this->statusBar();
this->setStatusBar(statusBar);
注意看右下角的消息,两秒后就消失了
当然也可以设置永久的消息提示,不过得借助控件来显示
// 显示永久消息
QLabel *l = new QLabel("hello qt", this);
statusBar->addWidget(l); // 将标签添加到状态栏
这样就能永久显示一个消息了。
也可以将消息放到右侧显示
// 显示永久消息
QLabel *l = new QLabel("hello qt", this);
statusBar->addPermanentWidget(l); // 将标签添加到状态栏右侧
两者的区别就在于调用的函数不同
浮动窗口
浮动窗口也称之为铆接部件看,⼀般是位于核心部件的周围可以有多个
创建浮动窗口
// 创建浮动窗口
QDockWidget* dockWidget = new QDockWidget();
// 把浮动窗口加入到窗口中.
this->addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
设置停靠位置
其停靠位置的原理和工具栏类似
// 创建浮动窗口
QDockWidget* dockWidget1 = new QDockWidget();
QDockWidget* dockWidget2 = new QDockWidget();
QDockWidget* dockWidget3 = new QDockWidget();
QDockWidget* dockWidget4 = new QDockWidget();
// 把浮动窗口加入到窗口中.
this->addDockWidget(Qt::LeftDockWidgetArea, dockWidget1);
this->addDockWidget(Qt::RightDockWidgetArea, dockWidget2);
this->addDockWidget(Qt::TopDockWidgetArea, dockWidget3);
this->addDockWidget(Qt::BottomDockWidgetArea, dockWidget4);
往浮动窗口添加内容
和其他的不同,不能直接给这个浮动窗口添加控件。一个浮动窗口只能加入一个控件,基于这个特性,可以利用布局管理器来添加内容。
先创建一个控件,在这个控件中添加布局管理器,然后在这个布局管理器里先添加其他的控件,再将这个控件添加进浮动窗口。
// 浮动窗口设置标题
dockWidget->setWindowTitle("这是浮动窗口");
// 创建控件
QWidget* container = new QWidget();
dockWidget->setWidget(container);
// 创建布局管理器, 把布局管理器设置到控件中
QVBoxLayout* layout = new QVBoxLayout;
container->setLayout(layout);
// 创建其他控件添加到 layout 中.
QLabel* label = new QLabel("这是一个 QLabel");
QPushButton* button = new QPushButton("这是按钮");
layout->addWidget(label);
layout->addWidget(button);
// 将这个控件添加到浮动窗口
dockWidget->setWidget(container);