QT5之windowswidget_菜单栏+工具栏_核心控件_浮动窗口_模态对话框_标准对话框/文本对话框

菜单栏+工具栏

新建工程基类是QMainWindow

1、

2、

3、

点.pro文件,添加配置

因为之后用到lambda;

在.pro文件添加配置c++11

CONFIG +=c++11
#不能加分号

添加头文件

#include <QMenuBar>//菜单栏的头文件

主窗口代码mainwindow.cpp文件

#include "mainwindow.h"
#include <QMenuBar>//菜单栏的头文件
#include <QMenu>//菜单的头文件
#include <QAction>//动作头函数
#include <QDebug>//打印头文件
#include<QToolBar>//工具头文件,快捷图标工具
#include<QPushButton>//添加按钮

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //菜单栏的文件菜单
    QMenuBar *mBar=menuBar();//生成一个菜单栏

    QMenu *pFile=mBar->addMenu("文件");//给菜单栏添加一个菜单名设置为文件;pFile就是指向这个文件菜单
    QAction *pnew= pFile->addAction("新建");//添加菜单项,pnew指向,新建菜单项 的动作返回值

    connect(pnew,&QAction::triggered,

            [=]()
            {
                 qDebug()<<"新建被按下";
            }
            );
   pFile->addSeparator();//添加分割线
   QAction *popen =pFile->addAction("打开");//再添加一个菜单项,pFile是指向菜单名为文件

   //工具栏,菜单项的快捷方式;菜单栏下面的图标快捷工具
   QToolBar *toolBar =addToolBar("toolBar");//添加工具栏,菜单栏下面的可视化图标工具快捷键 toolBar指向菜单栏
   toolBar->addAction( pnew );//工具栏添加快捷键,添加了一个指向新建菜单项

   QPushButton *b=new QPushButton(this);//在工具栏添加一个按键
   b->setText("按键1");

   //添加小控件
   toolBar->addWidget(b);//添加控件为b按钮的控件

  connect(b,&QPushButton::clicked,

          [=]() //()里面可以添加信号的参数列表 clicked 发了个bool 型 那么
          {
             b->setText("123");//按一次就变名字
          }

          );
  resize(500,500);


}

MainWindow::~MainWindow()
{

}

结果示图

核心控件和浮动窗口和模态和非模态对话框代码

#include "mainwindow.h"
#include <QMenuBar>//菜单栏的头文件
#include <QMenu>//菜单的头文件
#include <QAction>//动作头函数
#include <QDebug>//打印头文件
#include<QToolBar>//工具头文件,快捷图标工具
#include<QPushButton>//添加按钮

#include<QStatusBar>//状态栏的头文件
#include<QLabel>//标签头文件
#include<QTextEdit>//文本编辑器
#include<QDockWidget>//浮动窗口头文件

#include<QDialog>//对话窗口

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //菜单栏的文件菜单
    QMenuBar *mBar=menuBar();//生成一个菜单栏

    QMenu *pFile=mBar->addMenu("文件");//给菜单栏添加一个菜单名设置为文件;pFile就是指向这个文件菜单
    QAction *pnew= pFile->addAction("新建");//添加菜单项,pnew指向,新建菜单项 的动作返回值

    connect(pnew,&QAction::triggered,

            [=]()
            {
                 qDebug()<<"新建被按下";
            }
            );
   pFile->addSeparator();//添加分割线
   QAction *popen =pFile->addAction("打开");//再添加一个菜单项,pFile是指向菜单名为文件

   //工具栏,菜单项的快捷方式;菜单栏下面的图标快捷工具
   QToolBar *toolBar =addToolBar("toolBar");//添加工具栏,菜单栏下面的可视化图标工具快捷键 toolBar指向菜单栏
   toolBar->addAction( pnew );//工具栏添加快捷键,添加了一个指向新建菜单项

   QPushButton *b=new QPushButton(this);//在工具栏添加一个按键
   b->setText("按键1");

   //添加小控件
   toolBar->addWidget(b);//添加控件为b按钮的控件

  connect(b,&QPushButton::clicked,

          [=]() //()里面可以添加信号的参数列表 clicked 发了个bool 型 那么
          {
             b->setText("123");//按一次就变名字
          }

          );
  resize(500,500);

  //以下是状态栏*********************
  QStatusBar *sBar =statusBar();//
  QLabel *lable = new QLabel(this);//新建一个标签
  lable->setText("Normal text file");//给标签一个名字
  sBar->addWidget(lable);//状态栏  添加一个控件

  //默认从左往右边添加
  sBar->addWidget(new QLabel("2",this));    // 状态栏添加一个控件 ,控件为2 且控件父对象是这个窗口


  //状态栏 添加控件,从右边往左边添加
  sBar->addPermanentWidget(new QLabel("3",this));



  //核心控件*********************************
  QTextEdit *textEdit =new QTextEdit(this);//文本编辑器指定父对象为this
  setCentralWidget(textEdit); //设计一个核心控件,为文本编辑器


  //浮动窗口
  QDockWidget *dock=new QDockWidget(this);//一个新的浮动窗口
  addDockWidget(Qt::RightDockWidgetArea,dock);//F1进去看填什么参数,点击参数枚举从中看到第一个参数例子
  //添加一个浮动窗口dock 放在右边

  //模态对话框,弹出的窗口,无法操作主窗口
  //非模态对话框,弹出的窗口,且可以操作主窗口;

  QMenu *menu =mBar->addMenu("对话框");
  QAction *p1=  menu->addAction("模态对话框");
  connect(p1,QAction::triggered,
          [=]()
          {
             QDialog dlg;//一个对话框
             dlg.show();//显示对话框

             dlg.exec();//因为这个一直不退出,主窗口也不执行
             qDebug()<<"1111";

          }

          );
  QAction *p2=  menu->addAction("非模态对话框");
  connect(p2,QAction::triggered,
          [=]()
          {


//QDialog dlg;//一个对话框 这个因为会被释放,所以改成主窗口的成员在.h文件增加
      //或者 动态申请 对话框 QDialog *p_dlg = new QDialog(this);
      //动态申请 不好  如果多次进入非模块组,内存只会整个程序结束才释放。内存越来越少
     // QDialog *p_dlg = new QDialog(this);
     // p_dlg->show();
     // p_dlg->setAttribute(Qt::WA_DeleteOnClose,true);//F1进入,第一参,关闭的时候释放

          //QDialog dlg;//一个对话框 这个因为会被释放,所以改成主窗口的成员在.h文件增加
           dlg.show();//显示对话框
 //            dlg.exec();//非模态不能用这个,会阻塞
             qDebug()<<"1111";

          }

          );
  
  
  







}

MainWindow::~MainWindow()
{

}

标准对话框/文本对话框

需要包含头文件#include<QMessageBox>

选中这个头可以F1进入帮助文档找到如下

void    about(QWidget * parent, const QString & title, const QString & text)

参1 父类 ,参2 标题  参3 内容文本

主代码

#include "mainwindow.h"
#include <QMenuBar>//菜单栏的头文件
#include <QMenu>//菜单的头文件
#include <QAction>//动作头函数
#include <QDebug>//打印头文件
#include<QToolBar>//工具头文件,快捷图标工具
#include<QPushButton>//添加按钮

#include<QStatusBar>//状态栏的头文件
#include<QLabel>//标签头文件
#include<QTextEdit>//文本编辑器
#include<QDockWidget>//浮动窗口头文件

#include<QDialog>//标准对话窗口头文件
#include<QFileDialog>//文件对话窗口头文件


#include<QMessageBox>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //菜单栏的文件菜单
    QMenuBar *mBar=menuBar();//生成一个菜单栏

    QMenu *pFile=mBar->addMenu("文件");//给菜单栏添加一个菜单名设置为文件;pFile就是指向这个文件菜单
    QAction *pnew= pFile->addAction("新建");//添加菜单项,pnew指向,新建菜单项 的动作返回值

    connect(pnew,&QAction::triggered,

            [=]()
            {
                 qDebug()<<"新建被按下";
            }
            );
   pFile->addSeparator();//添加分割线
   QAction *popen =pFile->addAction("打开");//再添加一个菜单项,pFile是指向菜单名为文件

   //工具栏,菜单项的快捷方式;菜单栏下面的图标快捷工具
   QToolBar *toolBar =addToolBar("toolBar");//添加工具栏,菜单栏下面的可视化图标工具快捷键 toolBar指向菜单栏
   toolBar->addAction( pnew );//工具栏添加快捷键,添加了一个指向新建菜单项

   QPushButton *b=new QPushButton(this);//在工具栏添加一个按键
   b->setText("按键1");

   //添加小控件
   toolBar->addWidget(b);//添加控件为b按钮的控件

  connect(b,&QPushButton::clicked,

          [=]() //()里面可以添加信号的参数列表 clicked 发了个bool 型 那么
          {
             b->setText("123");//按一次就变名字
          }

          );
  resize(500,500);

  //以下是状态栏*********************
  QStatusBar *sBar =statusBar();//
  QLabel *lable = new QLabel(this);//新建一个标签
  lable->setText("Normal text file");//给标签一个名字
  sBar->addWidget(lable);//状态栏  添加一个控件

  //默认从左往右边添加
  sBar->addWidget(new QLabel("2",this));    // 状态栏添加一个控件 ,控件为2 且控件父对象是这个窗口


  //状态栏 添加控件,从右边往左边添加
  sBar->addPermanentWidget(new QLabel("3",this));



  //核心控件*********************************
  QTextEdit *textEdit =new QTextEdit(this);//文本编辑器指定父对象为this
  setCentralWidget(textEdit); //设计一个核心控件,为文本编辑器


  //浮动窗口
  QDockWidget *dock=new QDockWidget(this);//一个新的浮动窗口
  addDockWidget(Qt::RightDockWidgetArea,dock);//F1进去看填什么参数,点击参数枚举从中看到第一个参数例子
  //添加一个浮动窗口dock 放在右边

  //模态对话框,弹出的窗口,无法操作主窗口
  //非模态对话框,弹出的窗口,且可以操作主窗口;

  QMenu *menu =mBar->addMenu("对话框");
  QAction *p1=  menu->addAction("模态对话框");
  connect(p1,QAction::triggered,
          [=]()
          {
             QDialog dlg;//一个对话框
             dlg.show();//显示对话框

             dlg.exec();//因为这个一直不退出,主窗口也不执行
             qDebug()<<"1111";

          }

          );
  QAction *p2=  menu->addAction("非模态对话框");
  connect(p2,QAction::triggered,
          [=]()
          {


//QDialog dlg;//一个对话框 这个因为会被释放,所以改成主窗口的成员在.h文件增加
      //或者 动态申请 对话框 QDialog *p_dlg = new QDialog(this);
      //动态申请 不好  如果多次进入非模块组,内存只会整个程序结束才释放。内存越来越少
     // QDialog *p_dlg = new QDialog(this);
     // p_dlg->show();
     // p_dlg->setAttribute(Qt::WA_DeleteOnClose,true);//F1进入,第一参,关闭的时候释放

          //QDialog dlg;//一个对话框 这个因为会被释放,所以改成主窗口的成员在.h文件增加
           dlg.show();//显示对话框
 //            dlg.exec();//非模态不能用这个,会阻塞
             qDebug()<<"1111";

          }

          );


  //以下是文件对话框,和标准对话框***************
  //*************下面是标准对话框
  QAction *p3=  menu->addAction("关于对话框");
  connect(p3,QAction::triggered,
          [=]()
          {  //参 父类 标题 内容
             QMessageBox::about(this,"about","关于Qt");

          }
         );

  QAction *p4=  menu->addAction("问题对话框");
  connect(p4,QAction::triggered,
          [=]()
          {
             int ret=QMessageBox::question(this,"question","are you OK?",//参 父类 标题 内容
                      QMessageBox::Yes|QMessageBox::No);//指定对话框按钮,只能枚举内的
             switch (ret) {
             case QMessageBox::Yes:
                 qDebug()<<"i am ok";
                 break;

             case QMessageBox::No:
                 qDebug()<<"i am bad";
                 break;
             default:
                 break;
             }
          }
         );

//*************以下是文件对话框 *********


  QAction *p5=  menu->addAction("文件对话框");
  connect(p5,QAction::triggered,
          [=]()
          {  //获取打开文件名称  参 父类 标题 内容
             //返回为字符串 ,文件路径
           QString str  =QFileDialog::getOpenFileName(
                         this,"open","../",//父类,文本备注,上一级路径
                         "souce(*.cpp *.h);;Text(*.txt);;all(*.*)"//过滤选项
                                     );
           qDebug()<<str;
          }
         );




}

MainWindow::~MainWindow()
{

}

F1进入帮助文档,标准对话

QMessageBox::question(this,"question","are you OK?");使用F1进入帮助文档,

函数定义,有返回值

返回值枚举

标准对话框效果如下

F1 进入帮助文档文件对话

共有成员如下

QString    getOpenFileName(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)

如下是getOpenFileName解析和举例

 参数 : 父类, 文本备注,路径文本类型 ,过滤类型文本;

文件对话框效果图

 打印出文件路径

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解分布式事务⑨ ---->MySQL 事务的实现原理 之 MySQL 中的XA 事务(基本原理、流程分析、事务语法、简单例子演示)详解

目录 MySQL 事务的实现原理 之 MySQL 中的XA 事务&#xff08;基本原理、流程分析、事务语法、简单例子演示&#xff09;详解MySQL 中的 XA 事务1、XA 事务的基本原理1-1&#xff1a;XA 事务模型图&#xff1a;1-2&#xff1a;XA 事务模型的两阶段提交操作&#xff1a;Prepare …

「 网络安全常用术语解读 」通用漏洞报告框架CVRF详解

1. 背景 ICASI在推进多供应商协调漏洞披露方面处于领先地位&#xff0c;引入了通用漏洞报告框架&#xff08;Common Vulnerability Reporting Format&#xff0c;CVRF&#xff09;标准&#xff0c;制定了统一安全事件响应计划&#xff08;USIRP&#xff09;的原则&#xff0c;…

mysql 指定根目录 迁移根目录

mysql 指定根目录 迁移根目录 1、问题描述2、问题分析3、解决方法3.1、初始化mysql前就手动指定mysql根目录为一个大的分区(支持动态扩容)&#xff0c;事前就根本上解决mysql根目录空间不够问题3.1.0、方法思路3.1.1、卸载mariadb3.1.2、下载Mysql安装包3.1.3、安装Mysql 8.353…

ASP.NET 两种开发模式

1》》WebForm 开发模式 1. 服务器端控件 2. 一般处理程序html静态页Ajax 3. 一般处理程序html模板 如下图 2》》MVC 太复杂的系统&#xff0c;会造成Controller 过复杂。 后来就诞生了 MVP、MVVM等模式

腾讯云CentOS7使用Docker安装ElasticSearch与Kibana详细教程

文章目录 一、安装ElasticSearch二、安装Kibana 一、安装ElasticSearch 使用Docker拉取ElasticSearch镜像 这里版本选择的是7.15.2 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.22. 查看ElasticSearch的镜像id docker images3. 创建ElasticSearch容器 …

目标跟踪—卡尔曼滤波

目标跟踪—卡尔曼滤波 卡尔曼滤波引入 滤波是将信号中特定波段频率滤除的操作&#xff0c;是抑制和防止干扰的一项重要措施。是根据观察某一随机过程的结果&#xff0c;对另一与之有关的随机过程进行估计的概率理论与方法。 历史上最早考虑的是维纳滤波&#xff0c;后来R.E.卡…

nn.GRU层输出:state与output的关系

在 GRU&#xff08;Gated Recurrent Unit&#xff09;中&#xff0c;output 和 state 都是由 GRU 层的循环计算产生的&#xff0c;它们之间有直接的关系。state 实际上是 output 中最后一个时间步的隐藏状态。 GRU 的基本公式 GRU 的核心计算包括更新门&#xff08;update gat…

从零开始学AI绘画,万字Stable Diffusion终极教程(四)

【第4期】图生图 欢迎来到SD的终极教程&#xff0c;这是我们的第四节课 这套课程分为六节课&#xff0c;会系统性的介绍sd的全部功能&#xff0c;让你打下坚实牢靠的基础 1.SD入门 2.关键词 3.Lora模型 4.图生图 5.controlnet 6.知识补充 在前面的课程中&#xff0c;我…

QT:QT窗口(一)

文章目录 菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项添加分割线 工具栏创建工具栏设置停靠位置创建工具栏的同时指定停靠位置使用QToolBar类提供的setAllowedAreas函数来设置停靠位置 设置浮动属性设置移动属性 状态栏状态栏的创建在状态栏中显示实时消息在状态栏中显示永久…

数据结构-二叉树结尾+排序

一、二叉树结尾 1、如何判断一棵树是完全二叉树。 我们可以使用层序遍历的思路&#xff0c;利用一个队列&#xff0c;去完成层序遍历&#xff0c;但是这里会有些许的不同&#xff0c;我们需要让空也进队列。如果队列里到最后只剩下空那么这棵树就是完全二叉树。具体的实现如下…

工作问题记录React(持续更新中)

一、backdrop-filter:blur(20px); 毛玻璃效果&#xff0c;在安卓机上有兼容问题&#xff0c;添加兼容前缀也无效&#xff1b; 解决方案&#xff1a;让设计师调整渐变&#xff0c;不要使用该属性! 复制代码 background: radial-gradient(33% 33% at 100% 5%, #e9e5e5 0%, rgba…

本地部署大模型ollama+docker+open WebUI/Lobe Chat

文章目录 大模型工具Ollama下载安装运行Spring Ai 代码测试加依赖配置写代码 ollama的web&Desktop搭建部署Open WebUI有两种方式Docker DesktopDocker部署Open WebUIDocker部署Lobe Chat可以配置OpenAI的key也可以配置ollama 大模型的选择 本篇基于windows环境下配置 大模型…

线性数据结构-手写链表-LinkList

为什么需要手写实现数据结构&#xff1f; 其实技术的本身就是基础的积累和搭建的过程&#xff0c;基础扎实 地基平稳 万丈高楼才会久战不衰&#xff0c;做技术能一通百&#xff0c;百通千就不怕有再难得技术了。 一&#xff1a;链表的分类 主要有单向&#xff0c;双向和循环链表…

迎接AI时代:智能科技的社会责任与未来展望

AI智能体的社会角色、伦理挑战与可持续发展路径 引言&#xff1a; 在技术的浪潮中&#xff0c;AI智能体正逐步成为我们生活的一部分。它们在医疗、教育、交通等领域的应用&#xff0c;预示着一个全新的时代即将到来。本文将结合实际案例和数据分析&#xff0c;深入探讨AI智能体…

vue3--element-plus-抽屉文件上传和富文本编辑器

一、封装组件 article/components/ArticleEdit.vue <script setup> import { ref } from vue const visibleDrawer ref(false)const open (row) > {visibleDrawer.value trueconsole.log(row) }defineExpose({open }) </script><template><!-- 抽…

《MySQL45讲》读书笔记

重建表 alter table t engine InnoDB&#xff08;也就是recreate&#xff09;&#xff0c;而optimize table t 等于recreateanalyze&#xff0c;让表大小变小 重建表的执行流程 建立一个临时文件&#xff0c;扫描表 t 主键的所有数据页&#xff1b;用数据页中表 t 的记录生…

华为机考入门python3--(22)牛客22- 汽水瓶

分类&#xff1a;数字 知识点&#xff1a; 整除符号// 5//3 1 取余符号% 5%3 2 题目来自【牛客】 import sysdef calc_soda_bottles(n):if n 0: # 结束输入&#xff0c;不进行处理returnelse:# 循环进行汽水换算total_drunk 0 # 记录总共喝了多少瓶汽水while…

XSS注入漏洞解析(上)

XSS跨站脚本介绍 跨站脚本&#xff08;Cross-Site Scripting&#xff0c;XSS/CSS&#xff09;是一种经常出现在Web应用程序中的计算机安全漏洞&#xff0c;是 由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码&#xff08;通常包括 HTML代码和…

深入浅出 BERT

Transformer 用于学习句子中的长距离依赖关系&#xff0c;同时执行序列到序列的建模。 它通过解决可变长度输入、并行化、梯度消失或爆炸、数据规模巨大等问题&#xff0c;比其他模型表现更好。使用的注意力机制是神经架构的一部分&#xff0c;使其能够动态突出显示输入数据的…

Meta Llama 3 使用 Hugging Face 和 PyTorch 优化 CPU 推理

原文地址&#xff1a;meta-llama-3-optimized-cpu-inference-with-hugging-face-and-pytorch 了解在 CPU 上部署 Meta* Llama 3 时如何减少模型延迟 2024 年 4 月 19 日 万众期待的 Meta 第三代 Llama 发布了&#xff0c;我想确保你知道如何以最佳方式部署这个最先进的&…
最新文章