Qt窗口(2)
QToolBar
使用这个表示工具栏对象,一个对象可以有多个工具栏,也可以没有,工具栏往往可以手动移动
添加工具栏的语法:
C++
this->addToolBar(toolBar);
而添加菜单栏的语法:
C++
this->setMenuBar(menuBar);
set VS add:
set包含替代的含义,add不包含
运行代码如下:
C++
//工具栏需要手动创建出来的,自身不会创建
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);
运行结果如下:

添加图标的代码如下:
C++
//工具栏需要手动创建出来的,自身不会创建
QToolBar*toolBar=new QToolBar();
this->addToolBar(toolBar);
QAction*action1=new QAction("保存");
QAction*action2=new QAction("打开");
action1->setIcon(QIcon(":/save.png"));
action2->setIcon(QIcon(":/open.png"));
toolBar->addAction(action1);
toolBar->addAction(action2);
connect(action1,&QAction::triggered,this,&MainWindow::handle1);
connect(action2,&QAction::triggered,this,&MainWindow::handle2);
运行结果:

图标会覆盖文本
运用ToolTip可以使其悬停显示内容
代码如下:
C++
//工具栏需要手动创建出来的,自身不会创建
QToolBar*toolBar=new QToolBar();
this->addToolBar(toolBar);
QAction*action1=new QAction("保存");
QAction*action2=new QAction("打开");
action1->setToolTip("点击这里保存文件");
action1->setIcon(QIcon(":/save.png"));
action2->setIcon(QIcon(":/open.png"));
toolBar->addAction(action1);
toolBar->addAction(action2);
connect(action1,&QAction::triggered,this,&MainWindow::handle1);
connect(action2,&QAction::triggered,this,&MainWindow::handle2);
运行结果:

也可以结合菜单来使用:
运行结果:

如果一个QAction既是QMenu的也是QToolBar的,释放的时候会不会重复delete?
只会释放一次,不会重复delete
创建多个工具栏,工具栏是可以拖动的,这种状态称为"浮动"
代码如下:
C++
QToolBar*toolBar1=new QToolBar();
QToolBar*toolBar2=new QToolBar();
this->addToolBar(toolBar1);
this->addToolBar(toolBar2);
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);
运行结果:

也可以调整工具栏的位置:
代码如下:
C++
QToolBar*toolBar1=new QToolBar();
QToolBar*toolBar2=new QToolBar();
this->addToolBar(toolBar1);
this->addToolBar(Qt::LeftToolBarArea,toolBar2);
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);

可以设置允许放置的区域:
代码如下:
C++
QToolBar*toolBar1=new QToolBar();
QToolBar*toolBar2=new QToolBar();
this->addToolBar(toolBar1);
this->addToolBar(Qt::LeftToolBarArea,toolBar2);
toolBar2->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
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);

也可以设置不可以浮动
代码如下:
C++
//设置不允许浮动
toolBar2->setFloatable(false);
更可以设置不移动:
C++
//设置不允许移动
toolBar2->setMovable(false);
片转存中...(img-J9acoj57-1752829880136)]
也可以设置不可以浮动
代码如下:
C++
//设置不允许浮动
toolBar2->setFloatable(false);
更可以设置不移动:
C++
//设置不允许移动
toolBar2->setMovable(false);