Qt系统学习篇(6)-QMainWindow

news2024/10/5 5:58:17

QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。
在这里插入图片描述
1.1 菜单栏 最多有一个

  • QMenuBar * bar = MenuBar(); 创建菜单栏
  • setMenuBar(bar)
  • QMenu * fileMenu = bar -> addMenu("文件”) 创建菜单
  • QAction*newAction= fileMenu ->addAction(“新建”); 创建菜单项
  • fileMenu->addseparator(); 添加分割线

1.2 工具栏 可以有多个

  • QToolBar * toolbar = new QToolBar(this);*
  • addToolBar(默认停靠区域,toolbar );

1.3 状态栏 最多一个

  • QstatusBar" stBar= statusBar();.
  • 设置到窗口中 setstatusBar(stBar);
  • stBar->addwidget(label);放左侧信息
  • stBar->addPermanentWidget(label2);放右侧信息

1.4 铆接部件 - 浮动窗口 可以多个

  • QDockwidget
  • addDockwidge t( 默认停靠区域,浮动窗口指针)
  • 设置后期停靠区域

1.5 核心部件 只能一个

  • QTextEdit
  • setCentralwidget(edit);.

1、菜单栏、工具栏

mainWindow.cpp
#include "mainwindow.h"
#include <QMenuBar>
#include <QToolBar>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(600,400);
    this->setFixedSize(this->size());
    //创建菜单栏,放到窗口里
    QMenuBar*bar=menuBar();
    setMenuBar(bar);
    //创建菜单
    QMenu *fileMenu=bar->addMenu("文件");
    QMenu *editMenu=bar->addMenu("编辑");
    //创建菜单项、分割线
    QAction *newAction=fileMenu->addAction("新建");
    fileMenu->addSeparator();
    fileMenu->addAction("打开");
    //工具栏,可以有多个
    QToolBar *toolBar=new QToolBar(this);
    addToolBar(Qt::LeftToolBarArea,toolBar);
    //设置停靠、浮动
    toolBar->setAllowedAreas( Qt::LeftToolBarArea | Qt::RightToolBarArea);
    toolBar->setFloatable(false);
    //移动 (总开关)
    toolBar->setMovable(false);

    //工具栏添加内容
    toolBar->addAction(newAction);
    QPushButton* btn=new QPushButton(this);
    btn->setText("btn");
    toolBar->addWidget(btn);
}

MainWindow::~MainWindow()
{
}

实际ui效果
在这里插入图片描述

2、状态栏、铆接部件、核心部件

/******************状态栏**********************/
QStatusBar *stBar=statusBar();
setStatusBar(stBar);
QLabel* label1=new QLabel("提示信息",this);
QLabel* label2=new QLabel("右侧提示信息",this);
stBar->addWidget(label1);
stBar->addPermanentWidget(label2);
/******************铆接(浮动窗口)**************/
QDockWidget* dockWidget=new QDockWidget(this);
addDockWidget(Qt::BottomDockWidgetArea,dockWidget);
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
// dockWidget->setFloating(true);
/******************中心部件********************/
QTextEdit* textEdit=new QTextEdit(this);
setCentralWidget(textEdit);

效果图:1、2、3分别为状态栏、铆接、核心部件
在这里插入图片描述

3、资源文件添加

  • 图片拷贝到项目位置下
  • 新建-Qt-Qt resource File ,给资源文件起名res.qrc
  • open in editor 编辑资源,再添加前缀、添加文件

4、模态和非模态对话框

模态:不可以对其他窗口进行操作,阻塞
非模态对话框: 可以对其他窗口进行操作

mainWidget.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDialog>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->actionnew,&QAction::triggered,[=](){
       QDialog dialog1(this);
       dialog1.exec();
       qDebug()<<"模态对话框弹出了";
//       QDialog dialog2(this);
       QDialog*dialog2=new QDialog(this);//在堆上创建,防止一闪而过
       dialog2->show();
       dialog2->setAttribute(Qt::WA_DeleteOnClose);//关闭时就释放
       qDebug()<<"非模态对话框弹出了";

    });
}

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

5、 QMessageBox对话框

MessageBox的5个参数

QMessageBox::information(NULL,"information","是否退出系统",QMessageBox::No|QMessageBox::Yes,QMessageBox::No);

第一个参数:是父控件指针
第二个参数:标题名称
第三个参数:信息提示框内容
第四个参数:信息提示框里面有多少个按钮,一般情况下默认为OK
第五个参数:指定按下Enter键时使用的按钮

(1)、QMessageBox 5种用法

information 消息
critical 错误
warning 警告
question 提问
about 默认消息

在这里插入图片描述

QMessageBox::information(NULL,"information","是否退出系统",QMessageBox::No|QMessageBox::Yes,QMessageBox::No);
QMessageBox::critical(NULL,"critical","出错",QMessageBox::No|QMessageBox::Yes,QMessageBox::No);
QMessageBox::warning(NULL,"warning","警告,删除文件有危害",QMessageBox::No|QMessageBox::Yes,QMessageBox::No);
QMessageBox::question(NULL,"question","您的年龄是?",QMessageBox::No|QMessageBox::Yes,QMessageBox::No);
QMessageBox::about(NULL,"about","默认消息提示框");  //默认用法


(2)、判断QMessageBox 消息框里用户选择了哪个按钮:

void Widget::on_pushButton_iconChose_clicked()
{
    QMessageBox messageBox(QMessageBox::NoIcon,"登录","是否登录系统",QMessageBox::No|QMessageBox::Yes,NULL);
    int iResult=messageBox.exec();
    switch (iResult) {
    case QMessageBox::No:
        QMessageBox::about(NULL,"提示","你选择了no按钮");
        break;
    case QMessageBox::Yes:
        QMessageBox::about(NULL,"提示","你选择了yes按钮");
    default:
        break;
    }
}

在这里插入图片描述

(3)、 其他对话框

文件对话框

参数1 父亲 参数2 标题 参数3默认打开路径 参数4 过滤文件格式 返回值 选取文件的路径

QString str=QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\Admin\\Pictures\\Saved Pictures","(*.jpg)");

字体对话框

bool flag;
QFont font =QFontDialog::getFont(&flag,QFont("华文彩云",36));
qDebug()<<"字体"<<font.family().toUtf8().data()<<"字号"<<font.pointSize()<<"是否加粗"<<font.bold()<<"是否倾斜"<<font.italic();

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

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

相关文章

webpack信息泄露

先看看webpack中文网给出的解释 webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换、打包或包裹任何资源。 如果未正确配置&#xff0c;会生成一个.map文件&#xff0c;它包含了原始JavaScript代码的映…

算法笔记(九)——栈

文章目录 删除字符串中的所有相邻重复项比较含退格的字符串基本计算机II字符串解码验证栈序列 栈是一种先进后出的数据结构&#xff0c;其操作主要有 进栈、压栈&#xff08;Push&#xff09; 出栈&#xff08;Pop&#xff09; 常见的使用栈的算法题 中缀转后缀逆波兰表达式求…

关注、取关、Redis实现共同关注、 博客推送与分页查询

Resourceprivate StringRedisTemplate stringRedisTemplate;Resourceprivate IUserService userService;Overridepublic Result follow(Long followUserId, Boolean isFollow) {//1.获取登陆的用户Long userId UserHolder.getUser().getId();//1.判断是关注还是取关if(isFollo…

基于Springboot+Vue的小区运动中心预约管理系统的设计与实现 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这段数…

FPGA-UART串口接收模块的理解

UART串口接收模块 背景 在之前就有写过关于串口模块的文章——《串口RS232的学习》。工作后很多项目都会用到串口模块&#xff0c;又来重新理解一下FPGA串口接收的代码思路。 关于串口相关的参数&#xff0c;以及在文章《串口RS232的学习》中已有详细的描述&#xff0c;这里就…

Linux启动mysql报错

甲方公司意外停电&#xff0c;所有服务器重启后&#xff0c;发现部署在Linux上的mysql数据库启动失败.再加上老员工离职&#xff0c;新接手项目&#xff0c;对Linux系统了解不多&#xff0c;解决起来用时较多&#xff0c;特此记录。 1.启动及报错 1.1 启动语句1 启动语句1&a…

Java编程基础(Scanner类==>循环语句)

文章目录 前言一、Scanner类1.创建Scanner对象2.使用3.实践 二、if条件语句1.简单if语句2.if-else语句3.if-else if-else语句3.实践 三、switch 开关语句四、循环语句1.for语句2.while语句3.do-while语句4.break和continue语句 总结 前言 我们发现在学习Java语言编程基础时&am…

【GEE数据库】WRF常用数据集总结

【GEE数据库】WRF常用数据集总结 GEE数据集介绍数据1:MODIS数据集LAI(叶面积指数)和Fpar(绿色植被率)年尺度土地利用类型数据2:月反射率(Monthly Albedo)数据3:LULC和ISA参考GEE数据集介绍 GEE数据搜索网址-A planetary-scale platform for Earth science data &…

(PyTorch) 深度学习框架-介绍篇

前言 在当今科技飞速发展的时代&#xff0c;人工智能尤其是深度学习领域正以惊人的速度改变着我们的世界。从图像识别、语音处理到自然语言处理&#xff0c;深度学习技术在各个领域都取得了显著的成就&#xff0c;为解决复杂的现实问题提供了强大的工具和方法。 PyTorch 是一个…

9.30学习记录(补)

手撕线程池: 1.进程:进程就是运行中的程序 2.线程的最大数量取决于CPU的核数 3.创建线程 thread t1; 在使用多线程时&#xff0c;由于线程是由上至下走的&#xff0c;所以主程序要等待线程全部执行完才能结束否则就会发生报错。通过thread.join()来实现 但是如果在一个比…

08.STL简介

1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的 组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架 2.发展历史 1. 起源与早期探索&#xff08;20世纪80年代初期&#xff09;&#xff…

可变形卷积(Deformable Convolution)是什么?

普通卷积 普通卷积&#xff08;dilation1&#xff09; 普通卷积就是特征图与卷积核的权重W相乘再求和 y(p0​) 表示输出特征图在位置 p0​ 的值。&#x1d465;(&#x1d45d;0&#x1d45d;&#x1d45b;)表示输入特征图在位置 pn​ 的值。&#x1d464;(&#x1d45d;&…

烟火烟雾检测数据集 9600张 烟雾火焰检测 带标注 voc yolo 2类 烟火数据集 烟雾数据集 烟火检测烟雾检测

烟火检测数据集 9600张 烟雾火焰检测 带标注 voc yolo 烟火检测数据集介绍 数据集名称 烟火检测数据集 (Fire and Smoke Detection Dataset) 数据集概述 该数据集专为训练和评估基于YOLO系列目标检测模型&#xff08;包括YOLOv5、YOLOv6、YOLOv7等&#xff09;而设计&#x…

malloc源码分析之 ----- 你想要啥chunk

文章目录 malloc源码分析之 ----- 你想要啥chunktcachefastbinsmall binunsorted binbin处理top malloc源码分析之 ----- 你想要啥chunk tcache malloc源码&#xff0c;这里以glibc-2.29为例&#xff1a; void * __libc_malloc (size_t bytes) {mstate ar_ptr;void *victim;vo…

Qt Quick 3D 入门:QML 3D场景详解

随着 Qt 6 的发布&#xff0c;QtQuick3D 模块带来了新的 3D 渲染和交互能力&#xff0c;使得在 Qt 中创建 3D 场景变得更加简单和直观。本文将带您从一个简单的 QML 3D 应用开始&#xff0c;详细讲解各个相关领域的概念、代码实现以及功能特点。 什么是 Qt Quick 3D&#xff1…

C++拾趣——绘制Console中Check Box

大纲 居中显示窗口清屏并重设光标绘制窗口绘制窗口顶部绘制复选项绘制按钮行绘制窗口底部 修改终端默认行为对方向键的特殊处理过程控制Tab键的处理Enter键的处理上下左右方向键的处理 完整代码代码地址 这次我们要绘制复选框&#xff0c;如下图。 居中显示窗口 按照界面库的…

网约班车升级手机端退票

背景 作为老古董程序员&#xff0c;不&#xff0c;应该叫互联网人员&#xff0c;因为我现在做的所有的事情&#xff0c;都是处于爱好&#xff0c;更多的时间是在和各行各业的朋友聊市场&#xff0c;聊需求&#xff0c;聊怎么通过IT互联网 改变实体行业的现状&#xff0c;准确的…

ExcelToWord-Excel套打Word-Word邮件合并工具分享

Excel to Word转换工具分享 在日常工作或学习中&#xff0c;我们常常需要将Excel中的数据导出到Word文档中&#xff0c;以便更好地展示信息。市场上有许多Excel to Word的转换工具&#xff0c;它们各有特色。今天&#xff0c;我们就来推荐几款这样的工具&#xff0c;并探讨一下…

如何使用虚拟机充当软路由

文章目录 前言下载系统把 iso 转为虚拟机使用 VMware 创建虚拟机 前言 很多人需要软路由&#xff0c;但是软路由需要设备的投入&#xff0c;我这里使用虚拟机充当软路由。省下了设备的投入。不过多花了电费。大家自己取舍吧。 下载系统 ImmortalWrt Firmware Selector 在上…

蓝桥等级考试C++组18级真题-2023-06-18

选择题 1 C L18(15分) 已定义double rate 3.921576&#xff1b;以下可以正确输出变量rate 的是()。 A printf("%d",rate)&#xff1b; B printf("%f",rate)&#xff1b; C printf("%ld",rate)&#xff1b; D printf("%r",rate)&#…