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);
相关推荐
猫头虎1 分钟前
如何实现在多跳UDP传输场景,保证单文件和多文件完整传输的成功率?
java·开发语言·网络·python·网络协议·golang·udp
过客随尘4 分钟前
byte如何正确转int
后端·算法
茁壮成长的露露6 分钟前
openGauss逻辑备份恢复工具gs_dump/gs_restore
数据库·gaussdb
seanmeng202231 分钟前
理解AWS AgentCore - Long term Memory
算法
SimonKing44 分钟前
深入理解HanLP1.x,填平可能遇到的坑
java·后端·程序员
ygming1 小时前
Q55- code34- 在排序数组中查找元素的第一个和最后一个位置 + Q56- code33- 搜索旋转排序数组
前端·算法
朱皮皮呀1 小时前
Redis缓存详解:内存淘汰和缓存的预热、击穿、雪崩、穿透的原理与策略
数据库·redis·缓存
尘心不灭1 小时前
MyBatis 缓存与 Spring 事务相关笔记
java·spring·mybatis
watson_pillow1 小时前
mfc按钮点击事件没有触发,且程序卡死
c++·mfc
Java中文社群1 小时前
说说内存泄漏的常见场景和排查方案?
java·后端·面试