Qt窗口(2)-工具栏

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);
相关推荐
_深海凉_6 分钟前
LeetCode热题100-颜色分类
python·算法·leetcode
cmpxr_14 分钟前
【C】局部变量和全局变量及同名情况
c语言·开发语言
不剪发的Tony老师24 分钟前
Noir:一款键盘驱动的现代化数据库管理工具
数据库·sql
hetao173383740 分钟前
2026-04-09~12 hetao1733837 的刷题记录
c++·算法
6Hzlia41 分钟前
【Hot 100 刷题计划】 LeetCode 136. 只出现一次的数字 | C++ 哈希表&异或基础解法
c++·算法·leetcode
小碗羊肉1 小时前
【从零开始学Java | 第三十一篇下】Stream流
java·开发语言
MWWZ1 小时前
最近的一些软件更新
opencv·算法·计算机视觉
CoovallyAIHub1 小时前
视频理解新范式:Agent不再被动看视频,LensWalk让它自己决定看哪里
算法·架构·github
汉克老师1 小时前
GESP2024年6月认证C++三级( 第二部分判断题(1-10))
c++·数组·位运算·补码·gesp三级·gesp3级
❀͜͡傀儡师1 小时前
Spring AI Alibaba vs. AgentScope:两个阿里AI框架,如何选择?
java·人工智能·spring