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

news2024/9/23 1:39:47

目录

​编辑

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);

        //添加一段实时消息到状态栏中,持续时间为2s
    stbar->showMessage("我是状态栏",2000);
}

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

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

添加进度表

        //添加一个进度widget
    QProgressBar* 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);
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !

目录 C语言指针精讲1. 什么是指针?1.1 指针的内存模型1.1.1 指针演示输出 1.2 指针运算1.2.1 指针算术运算输出1.2.2 指针与数组的关系输出 1.3 指针类型1.3.1 不同类型的指针示例输出1.3.2 void 指针输出 1.4 指针与内存管理动态内存分配输出 1.5 指针与内存泄漏1.…

手写RPC-令牌桶限流算法实现,以及常见限流算法

为什么需要服务限流、降级 分布式架构下,不同服务之间频繁调用,对于某个具体的服务而言,可能会面临高并发场景。在这样的情况下,提供服务的每个服务节点就都可能由于访问量过大而引起一系列问题,比如业务处理耗时过长、…

数据结构中的八大金刚--------八大排序算法

目录 引言 一:InsertSort(直接插入排序) 二:ShellSort(希尔排序) 三:BubbleSort(冒泡排序) 四: HeapSort(堆排序) 五:SelectSort(直接选择排序) 六:QuickSort(快速排序) 1.Hoare版本 2.前后指针版本 …

数组Arrays,排序算法,String类,Stringbulider,正则表达式

## 数组 排序 经典的三大排序:冒泡,选择,插入 (一)冒泡排序核心:数组中的 相邻 两项比较,交换(正序or倒序) 正序原理图: 代码实现: public s…

jmeter 重试机制

一、功能实现 我们在测试过程中,请求接口可能是因为请求超时,或者接口异常失败,导致整个测试链路验证失败,jmeter重试机制,这个时候就可以避免上述问题发生 二、配置 1、添加线程组 首先,确保你已经在测…

Python | Leetcode Python题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; # The isBadVersion API is already defined for you. # def isBadVersion(version: int) -> bool:class Solution:def firstBadVersion(self, n: int) -> int:left, right 1, nwhile left < right:mid left (right - left) //…

power bi条件判断函数

power bi条件判断函数 1. iferror函数2. if 函数3. switch函数4. hasonefilter函数5. hasonevalue函数6. selectedvalue函数 1. iferror函数 遇到错误时使用指定数值替换注意&#xff1a;替换的必须是数值例子列 [销售数量]*[单价] 列 iferror([销售数量]*[单价],0) 列 ife…

昇思25天学习打卡营第17天|计算机视觉

昇思25天学习打卡营第17天 文章目录 昇思25天学习打卡营第17天ShuffleNet图像分类ShuffleNet网络介绍模型架构Pointwise Group ConvolutionChannel ShuffleShuffleNet模块构建ShuffleNet网络 模型训练和评估训练集准备与加载模型训练模型评估模型预测 打卡记录 ShuffleNet图像分…

自学Java第11Day

学习目标&#xff1a;面向对象进阶 学习内容&#xff1a;包、final、权限修饰符、代码块、抽象类、接口 学习时间&#xff1a; 下午 3 点-下午 6 点 学习产出&#xff1a; 什么的包&#xff1f; 包就是文件夹。用来管理各种不同功能的Java类&#xff0c;方便后期代码维护。 包…

【Go系列】Go的UI框架Fyne

前言 总有人说Go语言是一门后端编程语言。 Go虽然能够很好地处理后端开发&#xff0c;但是者不代表它没有UI库&#xff0c;不能做GUI&#xff0c;我们一起来看看Go怎么来画UI吧。 正文 Go语言由于其简洁的语法、高效的性能和跨平台的编译能力&#xff0c;非常适合用于开发GUI…

爬虫学习1:初学者简单了解爬虫的基本认识和操作(详细参考图片)

爬虫 定义&#xff1a;爬虫&#xff08;Web Crawler 或 Spider&#xff09;是一种自动访问互联网上网页的程序&#xff0c;其主要目的是索引网页内容&#xff0c;以便搜索引擎能够快速检索到相关信息。以下是爬虫的一些关键特性和功能&#xff1a; 自动化访问&#xff1a;爬虫能…

58、主从复制数据库+读写分离

mysql的主从复制和读写分离&#xff08;面试问原理&#xff09; mysql的主从复制和读写分离&#xff1a; 主从复制 面试必问 主从复制的原理。 读写分离&#xff0c;MHA 一、主从复制 1.1、主从复制的模式&#xff1a; 1、mysql的默认模式&#xff1a; 异步模式&#xf…

centos系统mysql数据库差异备份与恢复

文章目录 差异备份mysql数据一、 安装 Percona XtraBackup数据库中创建一些数据三、创建全备份四、创建差异备份1. 在数据库中添加数据&#xff0c;让数据发生一些改变2. 创建第一个差异备份3. 数据库中再次添加一些数据4. 创建第二个差异备份 五、模拟数据丢失&#xff0c;删库…

MongoDB 学习笔记

一、简介 1、MongoDB 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/ 2、数据看是什么 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的应用程序。 3、数据库的作用 主要作用是 管理数据…

Data Analytics for Business BISM7233

SSIS Task: Company_data.csv contains information for each of the companies, some of the state code information is missing in this table. You would need to use “state_code.csv” to fill in these blank cells under state code before creating the company dime…

利用OSMnx求路网最短路径并可视化(二)

书接上回&#xff0c;为了增加多路径的可视化效果和坐标匹配最近点来实现最短路可视化&#xff0c;我们使用图形化工具matplotlib结合OSMnx的绘图功能来展示整个路网图&#xff0c;并特别高亮显示计算出的最短路径。 多起终点最短路路径并计算距离和时间 完整代码#运行环境 P…

vite环境下使用bootstrap

环境 nodejs 18 pnpm 初始化 pnpm init pnpm add -D vite --registry http://registry.npm.taobao.org pnpm add bootstrap popperjs/core --registry http://registry.npm.taobao.org pnpm add -D sass --registry http://registry.npm.taobao.org新建vite.config.js cons…

【微服务】Spring Cloud Bus的注意事项和常用案例

文章目录 强烈推荐引言关键方面注意事项1. 消息代理选择2. 消息队列配置3. 消息持久化4. 幂等性5. 安全性6. 消息大小7. 性能监控8. 错误处理9. 版本兼容性10. 测试11. 配置同步12. 日志记录 常用示例示例 1: 配置同步配置服务器 (config-server)客户端服务 (client-service)触…

数据库的事务隔离级别有哪些?

并行事务会引发什么问题&#xff1f; 同时处理多个事务的时候&#xff0c;就可能出现脏读&#xff08;dirty read&#xff09;、不可重复读&#xff08;non-repeatable read&#xff09;、幻读&#xff08;phantom read&#xff09;的问题。脏读: 如果一个事务「读到」了另一个…

MQ消息队列+Lua 脚本实现异步处理下单流程,将同步下单改为异步下单

回顾一下下单流程&#xff1a; 用户发起请求 会先请求Nginx,Nginx反向代理到Tomcat&#xff0c;而Tomcat中的程序&#xff0c;会进行串行工作&#xff0c; 分为以下几个操作&#xff1a; 1 查询优惠券 2 判断秒杀库存是否足够 3 查询订单 4 校验是否是一人一单 5 扣减库…