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

news2024/11/15 19:26:22

菜单栏+工具栏

新建工程基类是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.coloradmin.cn/o/1643576.html

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

相关文章

了解并学会使用反射

目录 一、反射的应用场景&#xff08;简单了解&#xff09; 二、反射的定义 三、关于反射的四个重要的类 四、反射的使用 1.Class获取一个class对象的方式 方式一&#xff1a;forName&#xff08;&#xff09;&#xff1a; 方式二&#xff1a;封装类.Class&#xff1a; …

机器学习第37周周报 GGNN

文章目录 week37 GGNN摘要Abstract一、文献阅读1. 题目2. abstract3. 网络架构3.1 数据处理部分3.2 门控图神经网络3.3 掩码操作 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 传感器设置策略4.3.2 数据集4.3.3 实验设置4.3.4 模型参数设置4.3.5 实验结果 5. 结论 …

uniapp 安卓腾讯buglyapp性能监控原生插件

插件介绍 腾讯Bugly SDK可以帮助你发现多类异常问题&#xff0c;如崩溃&#xff0c;ANR&#xff0c;OOM&#xff0c;内存使用异常&#xff0c;应用操作卡顿&#xff0c;启动耗时过长等质量问题 插件地址 安卓腾讯buglyapp性能监控原生插件 - DCloud 插件市场 使用文档 uni…

大数据BI可视化(Echarts组件)项目开发-熟悉交互API5.0

全局echarts对象 init初始化 registerTheme注册主题 var mCharts echarts.init(document.querySelector("div"), itcast)registerMap地图图表 connect 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

Vue按照顺序实现多级弹窗(附Demo)

目录 前言1. 单个弹窗2. 多级弹窗 前言 强化各个知识点&#xff0c;以实战融合&#xff0c;以下两个Demo从实战提取 1. 单个弹窗 部署按钮框以及确定的方法即可 截图如下所示&#xff1a; 以下Demo整体逻辑如下&#xff1a; 点击“生成周月计划”按钮会触发showWeekPlanDia…

【前端学习——网络相关】浏览器同源策略和跨域

浏览器的同源策略 为什么要有&#xff1f; 帮助阻隔恶意文档&#xff0c;减少可能被攻击的媒介。&#xff08;就是为了安全&#xff09; 如果非同源&#xff0c;共有三种行为受到限制 &#xff08;1&#xff09; Cookie、LocalStorage 和 IndexDB 无法读取。 &#xff08;2…

JavaScript中的DOM和BOM

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 &#x1f4af;Web API&#x1f340;1 API的概念&#x1f340;2 Web API的概念…

闲来装个虚拟机Ubuntu24.04和硬盘分区及挂载

简述 最近ubuntu出新版本了&#xff0c;ubuntu24.04&#xff0c; 俗称高贵食蚁兽。5年前进行Android或者linux开发基本是在windows下的虚拟机中进行。目前&#xff0c;虽然物质基础提高了&#xff0c;功能有独立进行编译、代码管理的服务器了。可以通过ssh登录&#xff0c;但是…

基于java,SpringBoot和Vue的智慧校园在线考试留言讨论系统设计

摘要 基于Java, SpringBoot和Vue的智慧校园在线考试留言讨论系统是一个为现代教育需求定制的Web应用&#xff0c;它结合了最新的前后端技术来提供一个互动性强、用户友好的学习和交流平台。该系统旨在通过提供实时留言和讨论功能&#xff0c;增进学生间的互动以及师生之间的沟…

第九篇:Python编程的魔法:掌握高级语法糖与技巧

Python编程的魔法&#xff1a;掌握高级语法糖与技巧 1 引言 在编程的世界里&#xff0c;"语法糖"这个术语指的是那些让代码更容易读写的语法。Python作为一个强调可读性和效率的语言&#xff0c;提供了大量的语法糖。那么为什么需要掌握Python的高级特性呢&#xff…

C++ | Leetcode C++题解之第70题爬楼梯

题目&#xff1a; 题解&#xff1a; class Solution { public:int climbStairs(int n) {double sqrt5 sqrt(5);double fibn pow((1 sqrt5) / 2, n 1) - pow((1 - sqrt5) / 2, n 1);return (int)round(fibn / sqrt5);} };

Microsoft 365 for Mac(Office 365)v16.84正式激活版

office 365 for mac包括Word、Excel、PowerPoint、Outlook、OneNote、OneDrive和Teams的更新。Office提供了跨应用程序的功能&#xff0c;帮助用户在更短的时间内创建令人惊叹的内容&#xff0c;您可以在这里创作、沟通、协作并完成重要工作。 Microsoft 365 for Mac(Office 36…

【论文阅读笔记】Order Matters(AAAI 20)

个人博客地址 注&#xff1a;部分内容参考自GPT生成的内容 论文笔记&#xff1a;Order Matters&#xff08;AAAI 20&#xff09; 用于二进制代码相似性检测的语义感知神经网络 论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》…

华为对于商机的判断工具(收藏):PPVVC工具

来自《LTC与铁三角∶从线索到回款》一书中不错的收藏&#xff1a; 企业的合同商务部把这个模型开发为一个工具&#xff0c;基于 痛点&#xff08; Pain &#xff09;、权力&#xff08; Power &#xff09;、构想&#xff08; Vision &#xff09;、价值 &#xff08; Value …

6层板学习笔记2

说明:笔记基于6层全志H3消费电子0.65MM间距BGA 67、多层板的电源建议直接大面积铺铜,不建议走线,铺铜充分满足其载流能力 68、凡亿推荐表层1OZ的铜厚线宽20MIL能承载1A的电流,内层0.5OZ的铜厚线宽为40MIL能承载1A的电流,过孔直径20MIL(0.5MM)能承载1A左右的电流,实际设…

《QT实用小工具·五十五》带有标签、下划线的Material Design风格输入框

1、概述 源码放在文章末尾 该项目实现了一个带有标签动画、焦点动画、正确提示、错误警告的单行输入框控件。下面是demo演示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef LABELEDEDIT_H #define LABELEDEDIT_H#include <QObject> #include <QWidget>…

FTP和NFS

一、FTP 1.FTP原理 FTP&#xff08;file Transfer Protocol&#xff0c;文件传输协议&#xff09;&#xff0c;是典型的C/S架构的应用层协议&#xff0c;由客户端软件和服务端软件两个部分共同实现文件传输功能&#xff0c;FTP客户端和服务器之间的连接时可靠的&#xff0c;面…

华为OD机试 - 执行任务赚积分 - 动态规划(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

JVM六种常见的垃圾回收器-重点含CMS过程详解

一、jdk 1.8 及其之前的分代模型: 堆内存结构必须熟悉&#xff1a;&#xff08;垃圾回收&#xff0c;性能调优常用&#xff09; 过程简单分析&#xff1a; ①年轻代和老年代在堆内存中的占比默认 1 &#xff1a;2 ②年轻代又分为两个区&#xff0c;伊甸园区(Eden)和幸存区(S0和…

给Ollama套个WebUI,方便使用

Ollama 基本的安装使用参考前文 https://xugaoxiang.com/2024/05/01/ollama-offline-deploy/&#xff0c;前文使用的模型是 llama2&#xff0c;本篇将使用 llama3&#xff0c;因此在启动时&#xff0c;命令是 ollama run llama3。 Ollama Llama3 Llama3 是 Meta 发布的大语言模…