当前位置: 首页 > news >正文

【QT】窗口|菜单栏|菜单项|工具栏|状态栏|浮动窗口

目录

​编辑

QT窗口

窗口分类 

菜单栏

创建菜单栏,菜单,菜单项

菜单栏 

菜单

菜单项

添加分割线

 添加槽函数

​编辑

 添加快捷键 

工具栏 

停靠位置 

浮动属性

移动属性

添加快捷项

​编辑

状态栏

​编辑

添加标签

添加进度表

 ​编辑

 浮动窗口

​编辑 添加元素

​编辑

​编辑


QT窗口

通过QMainWindow类来实现,是一个提供主窗口程序的类

:包含一个菜单栏(menu bar),多个工具栏(tool bars),多个浮动窗口(dock widgets),一个状态栏(status bar)和一个中心部件(central widget)

窗口分类 

主窗口(QMainWindow)、对话框(QDialog)或者是一般的窗口部件(QWidget

  • QMainWindow(主窗口):这是QT中最常见的窗口类型,具有菜单栏、工具栏、状态栏和中心区域;
  • QDialog(对话框) :用于创建对话框窗口,常用于提示用户输入信息、显示警告或确认操作等场景。
  • QWidget(窗口部件):是最基础的用户界面对象,所有可视部件都继承自它。 

 

菜单栏

 Qt的菜单栏是通过QMenuBar来实现的,一个主窗口最多只有一个菜单栏,位于主窗口顶部,主窗口标题下的位置;

菜单栏里面包含了菜单,和菜单项;

创建菜单栏,菜单,菜单项

QMainWindow类本身提供了QMenuBar() (我们创建项目时如果勾选了.ui文件的自动创建),我们不需要在堆上new创建,而且这一方式也会造成本身携带的造成内存泄露:(因为,当我们自己new了挂到树上后,原来的就会脱离对象树,没有对其释放内存。)

 ​​​​​​

菜单栏 

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//利用本身存在menubar 创建菜单栏//1.如果 QMenuBar 已经存在,直接获取并返回//2.如果 QMenuBar 不存在,就先创建一个新的,再返回QMenuBar* menuBar = this->menuBar();// QMenuBar* menuBar = new QMenuBar();//将其设置到窗口上this->setMenuBar(menuBar);   //如果是获取到已经存在 QMenuBar ,这里的设置就是自己替换自己,仍然在对象树上
}

菜单

创建菜单后,通过QMenuBar的方法 addMenu(QMenu* menu)方法添加菜单到菜单项中;

     //创建菜单 通过addMenu添加到菜单栏中QMenu* menu1 = new QMenu("文件");QMenu* menu2 = new QMenu("编辑");QMenu* menu3 = new QMenu("保存");//将菜单添加到菜单中menuBar->addMenu(menu1);menuBar->addMenu(menu2);menuBar->addMenu(menu3);

菜单项

每个菜单项被点击时,触发信号QAction::triggred ;

利用该信号槽,来设置需要的行为;

    //创建菜单项QAction* act1 = new QAction("open");QAction* act2 = new QAction("close");QAction* act3 = new QAction("create");//将菜单项添加到菜单上menu1->addAction(act1);menu1->addAction(act2);menu1->addAction(act3);

添加分割线

在菜单项之间添加分割线,QMenu提供的addSeparator(); 

 添加槽函数

 在菜单项被点击的时候,会触发 triggered 这个信号;

 添加快捷键 

只需要在创建菜单项的时候,菜单项的名字后面加个(&+添加的快捷键即可)

    //创建菜单 通过addMenu添加到菜单栏中QMenu* menu1 = new QMenu("文件(&F)");QMenu* menu2 = new QMenu("编辑(&E)");QMenu* menu3 = new QMenu("保存&S");//将菜单添加到菜单中menuBar->addMenu(menu1);menuBar->addMenu(menu2);menuBar->addMenu(menu3);

 

ALT + 快捷键 触发快捷键 

工具栏 

工具栏是一个集成各种功能实现快捷方式使用的区域,可以有多个或没有。是一个可移动组件,通常以图标按钮形式存在;

停靠位置 

QToolBar类提供的setAllowedAreas()函数来设置状态栏的停靠位置。

在创建工具栏的同时,也可以设置工具栏的位置,默认位置是在窗口的最上面;

其中也可以设置的位置包括:

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

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建工具栏QToolBar* toolbar1 = new QToolBar(this);QToolBar* toolbar2 = new QToolBar(this);//设置工具栏的停靠位置    this->addToolBar(Qt::LeftToolBarArea,toolbar1);this->addToolBar(Qt::RightToolBarArea,toolbar2);
}

浮动属性

工具栏的浮动属性可以通过QToolBar类提供的setFloatable()函数来设置,

函数原型void setFloatable(bool floatable); 

    //设置浮动属性toolbar1->setFloatable(true);toolbar2->setFloatable(false);

移动属性

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

函数原型void setMovable(bool movable);

    //设置移动属性toolbar1->setMovable(false);toolbar2->setMovable(true);

添加快捷项

    QAction* act1 = new QAction("open",this);QAction* act2 = new QAction("close",this);//添加到工具栏中toolbar1->addAction(act1);//添加分割线toolbar1->addSeparator();toolbar1->addAction(act2);

状态栏

状态栏是一个输出简要信息的区域,一般位于主窗口底部,一个窗口只能有一个状态栏;

状态栏通过QStatusBar类来实现,一般可显示的信息类型:

  • 实时消息:当前程序状态;
  • 永久消息:程序版本号;
  • 进度消息:进度条显示,百分形式提示

添加标签

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建状态栏//    QStatusBar* stbar = new QStatusBar();QStatusBar* stbar = this->statusBar();//设置于窗口中this->setStatusBar(stbar);//添加一段实时消息到状态栏中,持续时间为2sstbar->showMessage("我是状态栏",2000);
}

当然,也可以添加其它widget空间,来达到"永久消息"的效果,比如添加label标签

    QLabel* label = new QLabel("我是标签",stbar);//将标签放入状态栏中stbar->addWidget(label);

添加进度表

        //添加一个进度widgetQProgressBar* progressbar = new QProgressBar(stbar);//设置范围和初始值progressbar->setRange(0,100);progressbar->setValue(25);//添加到状态栏中stbar->addWidget(progressbar);

 

 浮动窗口

浮动窗口时通过QDockWidget类来实现浮动功能,可以有多个

 

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//添加浮动窗口QDockWidget* dockWidget = new QDockWidget("浮动窗口",this);//添加浮动窗口到当前主窗口中     在底部this->addDockWidget(Qt::BottomDockWidgetArea,dockWidget);}

 添加元素

要想给浮动窗口内部添加一些控件,需要创建一个单独的 QWidget ,把要添加的控件加入到 QWidget 中,然后再把这个 QWidget 设置到 dockWidget 中。

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//添加浮动窗口QDockWidget* dockWidget = new QDockWidget("浮动窗口",this);//添加浮动窗口到当前主窗口中     设置在底部this->addDockWidget(Qt::BottomDockWidgetArea,dockWidget);//创建一个 QWidget ,并加入到 dockWidget 中QWidget* container = new QWidget();dockWidget->setWidget(container);//创建一个标签和一个垂直的布局管理器,把布局管理器加入到 Qwidget 中//再把控件加入到布局管理器中QLabel* label = new QLabel("这是一个标签",this);QVBoxLayout* vlayout = new QVBoxLayout();container->setLayout(vlayout);vlayout->addWidget(label);
}

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 详解Redis源码中的设计模式及设计思想
  • 【Apache Doris】周FAQ集锦:第 15 期
  • pyspark使用 graphframes创建和查询图的方法
  • Maven settings.xml 私服上传和拉取配置
  • 有效应对服务器遭受CC攻击的策略与实践
  • 鸿蒙特色物联网实训室
  • 【网络安全的神秘世界】Error:Archives directory /var/cache/apt/archives/partial is missing.
  • react + pro-components + ts完成单文件上传和批量上传
  • CVE-2024-24549 Apache Tomcat - Denial of Service
  • Golang | Leetcode Golang题解之第241题为运算表达式设计优先级
  • Java面试题--JVM大厂篇之Serial GC在JVM中有哪些优点和局限性
  • 数据库建立中间表的意义
  • 【D3.js in Action 3 精译_018】2.4 向选择集添加元素
  • WordPress杂技
  • kotlin get set
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • .pyc 想到的一些问题
  • Angular Elements 及其运作原理
  • codis proxy处理流程
  • Docker下部署自己的LNMP工作环境
  • ES2017异步函数现已正式可用
  • gitlab-ci配置详解(一)
  • java2019面试题北京
  • Puppeteer:浏览器控制器
  • SpingCloudBus整合RabbitMQ
  • SpringCloud集成分布式事务LCN (一)
  • WebSocket使用
  • 从tcpdump抓包看TCP/IP协议
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 学习HTTP相关知识笔记
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​批处理文件中的errorlevel用法
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计ssm电影分享网站
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)Dubbo快速入门、介绍、使用
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET delegate 委托 、 Event 事件
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net Stream篇(六)
  • .net 调用海康SDK以及常见的坑解释
  • .net 发送邮件
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 药厂业务系统 CPU爆高分析
  • .NET4.0并行计算技术基础(1)