C++客户端Qt开发——Qt窗口(工具栏)

2.工具栏

使用QToolBar表示工具栏对象,一个窗口可以有多个工具栏,也可以没有,工具栏往往也可以手动移动位置

①设置工具栏

cpp 复制代码
#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("保存");
    action1->setIcon(QIcon(":/1.jpg"));
    QAction* action2 = new QAction("打开");
    action2->setIcon(QIcon(":/2.jpg"));

    toolbar->addAction(action1);
    toolbar->addAction(action2);

    connect(action1,&QAction::triggered,this,&MainWindow::handle);
    connect(action2,&QAction::triggered,this,&MainWindow::close);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::handle()
{
    qDebug()<<"触发保存";
}

void MainWindow::close()
{
    qDebug()<<"触发打开";
}

②工具栏中的action也能在菜单栏中显示出来

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QToolBar>
#include<QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //创建菜单栏
    QMenuBar* menubar = this->menuBar();
    this->setMenuBar(menubar);
    //创建菜单
    QMenu* menu = new QMenu("文件");
    menubar->addMenu(menu);



    //创建工具栏
    QToolBar* toolbar = new QToolBar();

    this->addToolBar(toolbar);

    QAction* action1 = new QAction("保存");
    action1->setToolTip("点击这里保存文件");
    action1->setIcon(QIcon(":/1.jpg"));
    QAction* action2 = new QAction("打开");
    action2->setIcon(QIcon(":/2.jpg"));
    //菜单项设置到菜单中
    menu->addAction(action1);
    menu->addAction(action2);
    //菜单项设置到工具栏中
    toolbar->addAction(action1);
    toolbar->addAction(action2);

    connect(action1,&QAction::triggered,this,&MainWindow::handle);
    connect(action2,&QAction::triggered,this,&MainWindow::close);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::handle()
{
    qDebug()<<"触发保存";
}

void MainWindow::close()
{
    qDebug()<<"触发打开";
}

如果一个QAction既是QMenu的子元素,又是QToolBar的子元素,释放的时候,是否会重复delete?

不会,qt的对象树机制处理好了这样的释放

③设置多个工具栏

工具栏允许停靠的区域由QToolBar类提供的allowAreas()函数决定,其中可以设置的位置包括:

  • Qt:LeftToolBarArea:停靠在左侧
  • Qt:RightToolBarArea:停靠在右侧
  • Qt:TopToolBarArea:停靠在顶部
  • Qt:BottomToolBarArea:停靠在底部
  • Qt::AllToolBarAreas:以上四个位置都可停靠

还可以使用QToolBar类提供的setAllowedAreas()函数设置停靠位置。

  • 只允许在左侧停靠:toolBar1->setAllowedAreas(Qt:LeftToolBarArea);
  • 只允许在右侧停靠:toolBar2->setAllowedAreas(Qt:RightToolBarArea);

设置工具栏的移动属性可以通过QToolBar类提供的setMovable()函数来设置。

  • 设置不允许浮动:toolBar2->setFloatable(false);
  • 设置不允许移动:toolBar2->setMovable(false);

说明:

在创建工具栏的同时指定其停靠的位置,指的是程序运行时工具栏默认所在的位置;而使用setAllowedAreas()函数设置停靠位置,指的是工具栏允许其所能停靠的位置。

相关推荐
科学实验家2 小时前
最小生成树:Prim,kruskal
数据结构·c++·算法
学习智者2 小时前
《玄》IDE v3.6.3重磅发布:全功能修复与性能飞跃
开发语言·c++·ide·算法·中文语言 玄
2402_882893862 小时前
C++异常:从概念到实践的一篇博客
c++·异常
奔跑吧树袋熊2 小时前
多租户隔离该做到哪一层:从连接池到 ORM 的取舍
开发语言·数据库·oracle·系统架构
大江东去浪淘尽千古风流人物2 小时前
【LoMa】局部特征匹配重访:从LoMa-B到旋转不变LoMa-R的架构与工程实践
开发语言·深度学习·计算机视觉·r语言·视觉定位·sfm·局部特征匹配
菜鸟~noob2332 小时前
【电子战】测向精度极限——克拉美-罗下限(CRLB)与误差分析【含matlab代码】
开发语言·matlab
m0_734571762 小时前
深入理解C++ 析构函数<二>析构顺序
开发语言·c++
CodeMaker8082 小时前
规则更规范,应用却起不来:我重新理解了 Qt Agent Skills
qt
T1mzhou2 小时前
ARM64 Linux 6.10 内核驱动(14):drivers/base/platform.c:板级设备主战场
linux·c语言·开发语言·arm开发
小孩玩什么2 小时前
深入理解字符串匹配算法:BF算法,KMP算法
java·c语言·开发语言·数据结构·c++·算法