工具栏
工具栏是应用程序中集成各种功能实现快捷键使用的一个区域。
在Qt中使用QToolBar表示工具栏对象,一个窗口可以有多个工具栏,也可以没有,工具栏也是可以进行手动移动位置。
例子:创建工具栏
(1)创建工具栏
工具栏是需要手动创建出来的,自身不会自动创建
添加菜单栏,使用的是setMenuBar(“set”意味着菜单栏只能有一个,新的会替换旧的)
添加工具栏,使用的是addToolBar(“add”意味着工具栏可以有多个,可以进行重复设置,出现多个工具栏)
这条长直线就是工具栏,需要给工具栏添加菜单项QAction
(2)给工具栏的中添加菜单项
(3)添加qDebug()函数。测试菜单项
典型的工具栏,一般会展示图标,而不是文本。
(4)给工具栏中的菜单项添加图标
QAction如果出现在工具栏上,也会出现图标替代文本的情况。
而文本并不会因此消失,而是会以toolTip的方式存在,鼠标悬停上去的时候,就会出现一段提示信息。
(5)手动设置toolTip
除了系统提供的默认提示信息之外,也可以手动进行设置提示信息
(6)将菜单项放在菜单中
菜单可以放在工具栏中,也会放在菜单中,二者是都可以存在的。
这里如果一个QAction既是QMenu的子元素,也是QTool的子元素,是否会出现重复Delete?
Qt中已经将这类问题解决,只会释放一次,不会重复delete。
(7)代码展示
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QToolBar>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建工具栏
QToolBar* toolBar = new QToolBar();
this->addToolBar(toolBar);
// 添加菜单项
QAction* action1 = new QAction("新建");
QAction* action2 = new QAction("打印");
toolBar->addAction(action1);
toolBar->addAction(action2);
// 连接槽函数
connect(action1, &QAction::triggered, this, &MainWindow::handle1);
connect(action2, &QAction::triggered, this, &MainWindow::handle2);
// 添加图标
action1->setIcon(QIcon(":/new.png"));
action2->setIcon(QIcon(":/print.png"));
// 手动设置提示
action1->setToolTip("这里可以新建文件");
action2->setToolTip("这里可以打印文件");
// 设置菜单栏与菜单,将菜单项添加在菜单中
QMenuBar* menuBar = this->menuBar();
this->setMenuBar(menuBar);
QMenu* menu = new QMenu("菜单");
menuBar->addMenu(menu);
menu->addAction(action1);
menu->addAction(action2);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::handle1()
{
qDebug() << "新建";
}
void MainWindow::handle2()
{
qDebug() << "打印";
}
例子:创建多个工具栏
(1)设置俩个工具栏和四个菜单项,并将四个菜单俩个俩个分别放在不同的工具栏中。
如果将工具栏拖出来放到窗口的任意位置,称之为“浮动”状态。
- 可以设置工具栏出现的初始位置(上下左右)
- 可以设置工具栏允许停放在哪些边缘
- 可以设置工具栏是否允许浮动
- 可以设置工具栏是否可以移动
(2)设置工具栏出现的初始位置
在创建⼯具栏的同时,也可以设置⼯具栏的位置,其默认位置是在窗⼝的最上⾯;如上述代码,默认在最上⾯显⽰。⼯具栏允许停靠的区域由 QToolBar类 提供的 allowAreas()函数 决定,其中可以设置的位置包括:
- Qt::LeftToolBarArea 停靠在左侧
- Qt::RightToolBarArea 停靠在右侧
- Qt::TopToolBarArea 停靠在顶部
- Qt::BottomToolBarArea 停靠在底部
- Qt::AllToolBarAreas 以上四个位置都可停靠
(3)使⽤ QToolBar类 提供的 setAllowedAreas()函数 设置停靠位置
(4)设置浮动属性
⼯具栏的浮动属性可以通过 QToolBar类 提供的 setFloatable()函数 来设置。
setFloatable()函数原型为:
void setFloatable (bool floatable)
参数:
true:浮动
false:不浮动
(5)设置移动属性
设置⼯具栏的移动属性可以通过 QToolBar类 提供的 setMovable()函数 来设置。
setMovable()函数原型为:
void setMovable(bool movable)
参数:
true:移动
false:不移动
【说明】若设置⼯具栏为不移动状态,则设置其停靠位置的操作就不会⽣效,所以设置⼯具栏的移动属性类似于总开关的效果。
(6)执行程序
(7)代码展示
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QToolBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 设置俩个工具栏
QToolBar* toolBar1 = new QToolBar();
QToolBar* toolBar2 = new QToolBar();
// 默认初始化为顶部
this->addToolBar(toolBar1);
// 设置初始化为左边
this->addToolBar(Qt::LeftToolBarArea, toolBar2);
// 设置允许停靠在左边和右边
toolBar2->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
// 设置不允许浮动
toolBar2->setFloatable(false);
// 设置不允许移动
toolBar2->setMovable(false);
// 设置四个菜单项
QAction* action1 = new QAction("菜单项1");
QAction* action2 = new QAction("菜单项2");
QAction* action3 = new QAction("菜单项3");
QAction* action4 = new QAction("菜单项4");
// 将四个菜单项俩俩分开分别放在不同的工具栏中
toolBar1->addAction(action1);
toolBar1->addAction(action2);
toolBar2->addAction(action3);
toolBar2->addAction(action4);
}
MainWindow::~MainWindow()
{
delete ui;
}