【Qt】窗口

news2024/12/23 14:08:42

目录

  • 一、概述
  • 二、菜单栏(QMenuBar)
  • 三、工具栏(QToolBar)
  • 四、状态栏(QStatusBar)
  • 五、浮动窗口
  • 六、对话框

一、概述

Qt窗口是通过QMainWindow类来实现的。
QMainWindow是一个为用户提供主窗口程序的类,继承自QWidget类,并且提供了一个预定义的布局。QMainWindow包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个浮动窗口(铆接部件) (dock widgets)、一个状态栏(status bar)和一个中心部件(central widget),它是许多应用程序的基础,如文本编辑器,图片编辑器等。如下图为QMainwindow中各组件所处的位置:
在这里插入图片描述

二、菜单栏(QMenuBar)

Qt中的菜单栏是通过QMenuBar这个类来实现的。一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。.

菜单栏中包含菜单.菜单中包含菜单项.

实例

代码实现菜单栏

需要注意的是,每个菜单栏选项被点击时,触发信号,QAction::triggred,我们可以用过槽函数实现我们想要的功能

请添加图片描述

效果

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
#include<QMenuBar>
#include<QMenu>
#include<QAction>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //创建一个菜单栏
    QMenuBar* menuBar = new QMenuBar();
    this->setMenuBar(menuBar);

    //创建菜单
    QMenu* menu_1 = new QMenu("文件");
    QMenu* menu_2 = new QMenu("编辑");
    QMenu* menu_3 = new QMenu("构建");

    //将菜单添加到菜单栏
    menuBar->addMenu(menu_1);
    menuBar->addMenu(menu_2);
    menuBar->addMenu(menu_3);

    //创建菜单栏选项
    QAction* action_1 = new QAction("新建文件");
    QAction* action_2 = new QAction("打开文件");
    QAction* action_3 = new QAction("保存文件");
    QAction* action_4 = new QAction("退出");

    //将菜单栏选项添加到菜单栏
    menu_1->addAction(action_1);
    menu_1->addAction(action_2);
    menu_1->addAction(action_3);
    menu_1->addAction(action_4);

    //给action添加信号槽函数
    connect(action_1,&QAction::triggered,this,&MainWindow::handle);
    connect(action_4,&QAction::triggered,this,&MainWindow::close);
}

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

void MainWindow::handle()
{
    qDebug()<<"new file";
}

代码实现菜单栏,给菜单设置快捷键

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

在这里插入图片描述

代码实现菜单栏,给菜单选项添加分割

在菜单项之间可以添加分割线。分割线如下图所示,添加分割线是通过QMenu 类提供的addSeparator()函数来实现;

在这里插入图片描述

代码实现菜单栏,给菜单选项添加分割

其实就是再一个菜单中使用addMenu继续添加菜单,像是往菜单栏中添加菜单一样

在这里插入图片描述

三、工具栏(QToolBar)

工具栏是应用程序中集成各种功能实现快捷键使用的一个区域 。可以有多个,也可以没有,它并不是应用程序中必须存在的组件。它是一个可移动的组件,它的元素可以是各种窗口组件,它的元素通常以图标按钮的方式存在。如下图为工具栏的示意图:
在这里插入图片描述
调用QMainWindow类的addToolBar()函数来创建工具栏,每增加一个工具栏都需要调用一次该函数。如添加一个工具栏并加入一个 QAction。

实例:

添加一个工具栏条目

在这里插入图片描述
将工具栏停靠左

可以在创建工具栏的同时指定停靠的位置,
也可以通过鼠标移动工具栏位置
通过QToolBar类提供的setAllowedAreas()函数来设置允许停靠的方式。

在创建工具栏的同时,也可以设置工具栏的位置,其默认位置是在窗口的最上面;如上述代码,默认在最上面显示。工具栏允许停靠的区域由QToolBar类提供的allowAreas()函数决定,其中可以设置的位置包括:

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

在这里插入图片描述
将一个action同时添加到菜单栏和工具栏

请添加图片描述

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
#include<QToolBar>
#include<QMenuBar>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //创建一个菜单栏
    QMenuBar* menu = this->menuBar();
    this->setMenuBar(menu);
    QMenu* menu_1 = new QMenu("文件(&F)");
    menu->addMenu(menu_1);

    //创建一个工具栏
    QToolBar* toolbar = new QToolBar();
    this->addToolBar(toolbar);

    QAction* action_1  = new QAction("保存");
    action_1->setIcon(QIcon(":/new/prefix1/save.png"));
    //将选项添加到工具栏
    toolbar->addAction(action_1);
    //将选项添加到菜单栏
    menu_1->addAction(action_1);
}
MainWindow::~MainWindow()
{
    delete ui;
}

四、状态栏(QStatusBar)

状态栏和菜单栏一样,如果创建项目的时候勾选了创建 ui 界面,那么就会自动生成一个状态栏。

在这里插入图片描述

代码:

在这里插入图片描述

实例

在状态栏中左侧添加一个控件

在这里插入图片描述
在状态栏中右侧添加一个控件

在这里插入图片描述

五、浮动窗口

在Qt中,浮动窗口也称之为铆接部件。浮动窗口是通过QDockWidget类来实现浮动的功能。浮动窗口一般是位于核心部件的周围,可以有多个。

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

在这里插入图片描述

六、对话框

对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt常用的内置对话框有: QFiledialog (文件对话框)、QColorDialog (颜色对话框)、QFontDialog(字体对话框)、QInputDialog (输入对话框) 和QMessageBox (消息框)

实例

在主窗口中点击按钮弹出对话框

在ui中添加一个按钮,设置对应的槽函数

void MainWindow::on_pushButton_clicked()
{
    //创建一个对话框
    QDialog* dialog = new QDialog(this);
    //调整对话框大小
    dialog->resize(400,300);
    //设置对话框标题
    dialog->setWindowTitle("对话框");
    //显示对话框
    dialog->show();

    //dialog随此Widget生命周期,如果频繁调用此接口,则频繁生成QDialog,会造成内存泄露
    dialog->setAttribute(Qt::WA_DeleteOnClose);
}

请添加图片描述
在主窗口中点击按钮弹出对话框,在对话框中添加一些控件

通过代码方式实现

需要自己实现一个类,在继承QDialog的基础上继续进行扩展
在这里插入图片描述
让该类继承QDialog
在这里插入图片描述
继续在其构造函数中添加一些控件
在这里插入图片描述
效果

请添加图片描述

通过代码+UI实现

第一步新建文件中点击,一路下一步
在这里插入图片描述
生成对应的类和ui文件
在这里插入图片描述
在dialog的ui中添加控件
在这里插入图片描述
在mainwindow的ui中添加控件
在这里插入图片描述

给对应的按钮添加槽函数
在这里插入图片描述
效果
请添加图片描述
模态和非模态

模态对话框指的是:显示后无法与父窗口进行交互,是一种阻塞式的对话框。使用QDialog::exec()函数调用。
模态对话框适用于必须依赖用户选择的场合,比如消息显示,文件选择,打印设置等。

非模态对话框显示后独立存在,可以同时与父窗口进行交互,是一种非阻塞式对话框,使用
QDialog:show()函数调用。

将上述代码的 show 函数改成 exec 函数,就是模态对话框。
运行程序,当窗口弹出后,无法操作父窗口

实例

模态
请添加图片描述
内置对话框

Qt提供了多种可复用的对话框类型,即Qt标准对话框。Qt 标准对话框全部继承于QDialog类。常用标准对话框如下:
在这里插入图片描述
1.消息对话框
消息对话框是应用程序中最常用的界面元素。消息对话框主要用于为用户提示重要信息,强制用户进行选择操作。
QMessageBox类中定义了静态成员函数,可以直接调用创建不同风格的消息对话框,其中包括:

在这里插入图片描述
实例

void MainWindow::on_pushButton_clicked()
{
    QMessageBox* messagebox = new QMessageBox(this);
    messagebox->setWindowTitle("提示");
    messagebox->setText("这是提示信息");
    messagebox->setIcon(QMessageBox::Warning);

    messagebox->setStandardButtons(QMessageBox::Ok|QMessageBox::Cancel);

    //添加按钮
    //QPushButton* button_1 = new QPushButton(this);
    //messagebox->addButton(button_1,QMessageBox::AcceptRole);

    //通过exec返回值,可以获取用户点击的
    int result =messagebox->exec();
    messagebox->setAttribute(Qt::WA_DeleteOnClose);
}

请添加图片描述

exec 函数是设定对话框是模态对话框,同时它也有一个返回值,返回值就是对话框被选中了哪个按钮的值。

在这里插入图片描述
2.颜色对话框

颜色对话框的功能是允许用户选择颜色。继承自QDialog类。

在这里插入图片描述
实例

void MainWindow::on_pushButton_clicked()
{
//这个函数静态函数,不必创建对话框对象就可直接使用
    QColor color = QColorDialog::getColor(QColor(255,0,0),this,"选择颜色");
    qDebug() << color;//这里只是简单答应,可以实现更为复杂的操作
}

在这里插入图片描述

3.文件对话框

文件对话框用于应用程序中需要打开一个外部文件或需要将当前内容存储到指定的外部文件。

使用 getOpenFileName 打开文件,getSaveFileName 保存文件。
此处的打开 / 保存的功能是需要我们额外去实现的,这里只是简单介绍一下。

实例

在这里插入图片描述
4.字体对话框

Qt中提供了预定义的字体对话框类QFontDialog,用于提供选择字体的对话框部件。
使用 getFont 函数弹出字体对话框

实例

在ui中添加一个button,添加槽函数

void MainWindow::on_pushButton_clicked()
{
    bool ok = false;
    //静态函数
    QFont font = QFontDialog::getFont(&ok);
    qDebug()<<"ok = "<<ok;
    //输出字体格式
    qDebug()<<font.family();
    qDebug()<<font.pointSize();
    qDebug()<<font.bold();

    ui->pushButton->setFont(font);
}

请添加图片描述

5.输入对话框

Qt中提供了预定义的输入对话框类: QInputDialog, 用于进行临时数据输入的场合。

有 getInt 函数输入一个整数,getDouble 函数输入一个浮点数,getItem 函数输入一个条目,可提前添加条目进行选择

实例

在ui中添加三个button,实现槽函数,该案例只是将获取到数据进行打印,也可实现更复杂的操作

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QInputDialog>
#include<QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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


void MainWindow::on_pushButton_clicked()
{
    int result = QInputDialog::getInt(this,"整数对话框","请输入一个整数");
    qDebug()<<result;
}

void MainWindow::on_pushButton_2_clicked()
{
    double result = QInputDialog::getDouble(this,"浮点数对话框","请输入一个浮点数");
    qDebug()<<result;
}

void MainWindow::on_pushButton_3_clicked()
{
    QStringList items;
    items.push_back("1");
    items.push_back("2");
    items.push_back("3");
    QInputDialog::getItem(this,"条目对话框","请输入条目",items);
    qDebug()<<items;
}

请添加图片描述

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

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

相关文章

程序数据模型由OS还是硬件架构决定?

文章目录 前言硬件架构的作用OS的作用编译器的角色OS的数据模型参考 前言 在文章 1>>32的结果是1还是0 中提到了数据模型 L P 64 LP64 LP64 &#xff0c;并提出这个数据模型主要是由 U n i x Unix Unix 以及类 U n i x Unix Unix 的操作系统使用居多&#xff0c;例如…

SpringBoot 缓存预热

简介&#xff1a; SpringBoot集合RedisUtil和 CommadnLinRunner实现缓存预热 一、新建一个缓存抽象类 在redis模块里面 新建 /*** 缓存抽象类*/ Component public abstract class AbstractCache {// 初始化缓存public void initCache() {}public <T> T getCache(Strin…

虚拟现实(VR)项目的开发工具

虚拟现实&#xff08;VR&#xff09;项目的开发涉及到多种工具&#xff0c;这些工具可以帮助开发者从建模、编程到最终内容的发布。以下是一些被广泛认可的VR开发工具&#xff0c;它们覆盖了从3D建模到交互设计等多个方面。北京木奇移动技术有限公司&#xff0c;专业的软件外包…

PySpark的学习

一. 什么是PySpark 使用过的bin/pyspark 程序 , 要注意 , 这个只是一个 应用程序 , 提供一个 Python 解释器执行环境来运行 Spark 任务 现在说的 PySpark, 指的是 Python 的运行类库 , 是可以在 Python 代码中 :import pyspark PySpark 是 Spark 官方提供的一个 Python …

MP设置动态表名

Mybatis设置动态表名 Mybatis设置动态表名1.动态表名插件2.传递表名3.注意事项 Mybatis设置动态表名 1.动态表名插件 MybatisPlus中提供了一个动态表名的插件&#xff1a;https://baomidou.com/pages/2a45ff/#dynamictablenameinnerinterceptor 插件的部分源码如下&#xff…

【SpringCloud】Eureka注册中心

目 录 一.Eureka的结构和作用二.搭建 eureka-server1. 创建 eureka-server 服务2. 引入 eureka 依赖3. 编写启动类4. 编写配置文件5. 启动服务 三.服务注册1. 引入依赖2. 配置文件3. 启动多个user-service实例 四.服务发现1. 引入依赖2. 配置文件3. 服务拉取和负载均衡 总结 假…

【MATLAB源码-第24期】基于matlab的水声通信中海洋噪声的建模仿真,对比不同风速的影响。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 水声通信&#xff1a; 水声通信是一种利用水中传播声波的方式进行信息传递的技术。它在水下环境中被广泛应用&#xff0c;特别是在海洋科学研究、海洋资源勘探、水下军事通信等领域。 1. **传输媒介**&#xff1a;水声通信利…

【IC前端虚拟项目】mvu顶层集成的原则与技巧

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 截止目前,所有的子模块编码均宣告完成,接下来就是封装顶层的时刻了。我自己规划和集成顶层一般有一个习惯,就是在top层下面封装core层和其他模块,比如mvu的top层下例化了mvu_reg和mvu_core两个模块,…

鸿蒙OS开发实战:【网络管理HTTP数据请求】

一、场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 二、 接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表&#xff0c;…

最优算法100例之18-列升序行升序的数组中查找元素

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一…

WebScraper网页数据爬取可视化工具使用(无需编码)

前言 Web Scraper 是一个浏览器扩展&#xff0c;可以实现无需编码即可爬取网页上的数据。只需按照规则进行配置&#xff0c;即可实现一键爬取导出数据。 安装 进入Google应用商店安装此插件&#xff0c;安装步骤如下&#xff1a; 进入Google应用商店需要外网VPN才能访问&…

贪吃蛇:从零开始搭建一个完整的小游戏

目录 导语&#xff1a; 一、游戏框架 二、蛇的实现 三、绘制游戏界面 四、食物 五、移动蛇 六.得分系统&#xff0c;是否吃到食物 七、检查碰撞 八、处理按键事件 九、得分系统 十、游戏状态管理 导语&#xff1a; 贪吃蛇这个经典的小游戏&#xff0c;我上学的时候就…

用一个程序解决SQLite常见的各项操作(实用篇)

文章说明&#xff1a; 本篇文章是在之前的一篇文章SQLite3进行数据库各项常用操作基础上写的&#xff0c;将SQLite涉及到的常用的几种操作&#xff0c;以函数的形式处理成相互调用的形式。 因为之前的文章对基础操作已经解释过了&#xff0c;所以这里直接放置可执行代码和结果…

常见6种开源协议比较

前言 常见的开源许可协议有6种是比较常见和广泛使用的&#xff0c;每种协议都有其特定的使用场景和约束条件。这6种分别是GPL, LGPL&#xff0c;MIT许可证&#xff0c; Apache许可证&#xff0c;BSD许可证和Mozilla Public License&#xff08;MPL&#xff09;. 6种开源许可协议…

深度学习评价指标(1):目标检测的评价指标

1. 简述 在计算机视觉/深度学习领域&#xff0c;每一个方向都有属于自己的评价指标。通常在评估一个模型时&#xff0c;只需要计算出相应的评价指标&#xff0c;便可以评估算法的性能。同时&#xff0c;所谓SOTA&#xff0c;皆是基于某一评价指标进行的评估。 接下来&#xff0…

GitHub - 使用SSH进行连接

文章目录 前言开发环境单个SSH密钥1.1. 生成SSH密钥1.2. 添加SSH密钥1.3. 测试SSH连接2.1. 简化密钥密码输入 多个SSH密钥1.1. 生成/添加/测试SSH密钥2.1. 简化密钥密码输入 无密码密钥补充内容最后 前言 有一个SSH密钥跟了我很多年&#xff0c;更换电脑也不曾更换它。它不需要…

腾讯云轻量2核2G3M云服务器优惠价格61元一年,限制200GB月流量

腾讯云轻量2核2G3M云服务器优惠价格61元一年&#xff0c;配置为轻量2核2G、3M带宽、200GB月流量、40GB SSD盘&#xff0c;腾讯云优惠活动 yunfuwuqiba.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云轻量2核2G云服务器优惠价格 腾讯云&#xff1a;轻量应用服务器100%CPU性能…

QT初识(1)

QT初识 桌面开发什么是QT下载QT安装好之后的工具AssisantDesignerQT Creator 创建一个简单的项目 我们今天来认识一下QT。 桌面开发 在了解QT&#xff0c;我们得了解一下桌面开发&#xff1a; 桌面开发指的是编写和构建在个人计算机或其他桌面操作系统&#xff08;如Windows、…

论文笔记 - :MonoLSS: Learnable Sample Selection For Monocular 3D Detection

论文笔记✍MonoLSS: Learnable Sample Selection For Monocular 3D Detection &#x1f4dc; Abstract &#x1f528; 主流做法限制 &#xff1a; 以前的工作以启发式的方式使用特征来学习 3D 属性&#xff0c;没有考虑到不适当的特征可能会产生不利影响。 &#x1f528; 本…

全面概述Gitee和GitHub生成/添加SSH公钥

前言 现如今将代码开源已经成为软件开发行业的一种趋势&#xff0c;而现在比较有名的代码托管平台有GItHub、Gitee、Gitlab等相关平台。而我们在使用代码托管平台最为常见的就是如何将自己本地的代码推送到远程托管平台中的仓库中&#xff0c;现如今各大托管平台基本上都提供了…