当前位置: 首页 > news >正文

2.21号qt

1.QMainWindow中常用的类

继承于QMainWindow类,原因该类提供了QWidget没有提供的成员函数。

菜单栏、工具栏、状态栏、浮动窗口(铆接部件)、核心部件

1.1 菜单栏 QMenuBar

    //创建菜单栏 QMenuBar  最多只能有一个
    QMenuBar *mbar = menuBar();
    //将菜单栏放入窗口中
    this->setMenuBar(mbar);
    //往菜单栏里增加菜单
    QMenu *file = mbar->addMenu("文件");
    QMenu *edit = mbar->addMenu("编辑");
    //往菜单中增加菜单项
    file->addAction("新建");
    //增加分隔符
    file->addSeparator();
    file->addAction("打开");

1.2 工具栏 QToolBar

  //创建工具栏 QToolBar  可以有多个
    QToolBar *tbar = new QToolBar(this);
    //将工具栏放入窗口中  设置停靠区域
    this->addToolBar(Qt::LeftToolBarArea,tbar);
    //后期设置 只允许左右停靠
    tbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
    //不允许浮动
    tbar->setFloatable(false);
    //往工具栏中增加工具项
    tbar->addAction("欢迎");


    //实例化一个按钮
    QPushButton *btn = new QPushButton(this);
    btn->setText("编辑");
    //将按钮放入工具栏中
    tbar->addWidget(btn);

1.3 状态栏 QStatusBar

    //创建状态栏 QStatusBar  最多只能有一个
    QStatusBar *sbar = statusBar();
    //将状态栏放入窗口中
    this->setStatusBar(sbar);


    //实例化一个标签
    QLabel *lab = new QLabel("问题",this);
    //将标签放入状态栏中
    //sbar->addWidget(lab);//默认从左边显示
    sbar->addPermanentWidget(lab); //默认从右边显示

1.4 浮动窗口 QDockWidget

   //创建浮动窗口  QDockWidget 可以有多个
    QDockWidget *dock = new QDockWidget("浮动窗口",this);
    //将浮动窗口放入界面中
    this->addDockWidget(Qt::BottomDockWidgetArea,dock);
    //后期设置 只允许左右停靠
    dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);


    //创建中心部件  最多只能有一个
    QTextEdit *text_edit = new QTextEdit(this);
    //将中心部件放入窗口中
    this->setCentralWidget(text_edit);

2.ui界面文件

1> ui界面文件是在项目工程文件的Forms文件夹下(XXX.ui)

2> ui界面上可以通过ui指针访问到ui界面上的所有组件。

3.信号与槽

qt以引为傲的核心机制:对象树、信号与槽、事件机制

1> 信号和槽是qt的核心机制之一,可以实现多个组件之间的通信。

2> 信号:信号函数。信号定义在类体的signals权限下,信号函数是一个不完整的函数,只需要声明,不需要实现。

3> 槽:槽函数。槽定义在类体的slots权限下,槽函数是一个完整的函数,既要有声明,也要有定义。该函数可以当成普通函数使用。

4> 任意一个组件都有系统提供的信号和槽。

3.1 带有信号和槽的类体定义

signals: //信号权限,该权限下函数 都是信号
    void my_signal(); //只需要声明 不需要实现
    
    
public slots: //槽函数权限  ,该权限下函数 都是槽函数
    void my_slot(); //需要声明 也要实现

3.2 信号和槽的连接方式

3.2.1

基于ui界面上的连接,在ui界面下的信号和槽区,将系统提供的信号和槽进行连接。

该连接,无需手动书写信号函数、槽函数、连接函数

3.2.2

基于ui界面上的连接,在组件上,右击转到槽,选中要发射的信号,在槽函数中处理相关逻辑代码。

该连接,无需手动书写信号函数、连接函数

3.2.3

手动连接信号和槽,基于qt4版本的连接,该连接是不友好的连接。

需要使用connect连接函数进行连接,在QObject类中

[static] QMetaObject::Connection //函数的返回值类型  静态成员函数
    QObject::connect( //函数名
        const QObject *sender, //发送者 组件的指针
        const char *signal, //发送的信号 信号的函数 应该用函数指针接收 不能用char *接收 所以需要使用宏函数转换
        const QObject *receiver, //接受者 组件的指针
        const char *method, // 槽函数 应该用函数指针接收 不能用char *接收 所以需要使用宏函数转换
        )

信号宏函数 SIGNAL()
槽宏函数 SLOT()

3.2.4

手动连接信号和槽,基于qt5版本的连接,该连接就是友好的连接

需要使用connect连接函数进行连接,在QObject类中

[static] QMetaObject::Connection //函数返回值类  静态函数
    QObject::connect( //函数名
        const QObject *sender, //信号的发送者  组件的指针
        PointerToMemberFunction signal, //信号函数  可以直接传函数名 原因是函数指针接收
        const QObject *receiver, //信号的接收者  组件的指针
        PointerToMemberFunction method, //槽函数 可以直接传函数名 原因是函数指针接收
        )

3.2.5

手动连接信号和功能函数,如果信号一旦被触发,则自动执行功能函数中的内容。

功能函数:全局函数、lambda表达式

[static] QMetaObject::Connection 
    QObject::connect(
        const QObject *sender, 
        PointerToMemberFunction signal, 
        Functor functor//功能函数
        )

3.3 自定义的信号

自定义的信号,定义在signals权限下,是一个不完整的函数,只要声明,不要实现。

自定义 的信号,需要手动触发,使用emit关键字进行发射信号,如果自定义的信号一旦被发射,则会自动执行对应的槽函数处理

3.4 断开连接

disconnect()和connect()函数的参数一样

作业

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->btn1,SIGNAL(clicked()),this,SLOT(close()));connect(ui->logbtn,&QPushButton::clicked,this,&Widget::my_slot1);}Widget::~Widget()
{delete ui;
}void  Widget::my_slot1()
{QString uname;QString pword;uname=ui->ed1->text();pword=ui->ed2->text();if(uname=="admin" && pword=="123456"){qDebug() << "登录成功" ;this->close();}else{qDebug() << "登录失败";ui->ed2->clear();}}

相关文章:

2.21号qt

1.QMainWindow中常用的类 继承于QMainWindow类&#xff0c;原因该类提供了QWidget没有提供的成员函数。 菜单栏、工具栏、状态栏、浮动窗口&#xff08;铆接部件&#xff09;、核心部件 1.1 菜单栏 QMenuBar //创建菜单栏 QMenuBar 最多只能有一个 QMenuBar *mbar menu…...

什么是MVVM?MVC、MVP与MVVM模式的区别?

MVVM&#xff08;Model-View-ViewModel&#xff09;是一种软件架构模式&#xff0c;用于将用户界面&#xff08;View&#xff09;与业务逻辑&#xff08;Model&#xff09;分离&#xff0c;并通过ViewModel来连接两者。MVVM的目标是实现可测试性、可维护性和可复用性。 MVC&am…...

ElementUI组件的安装和使用

Element UI 是一款基于 Vue 2.0 的桌面端组件库&#xff0c;主要用于快速构建网站的前端部分。它提供了丰富的组件&#xff0c;如按钮、输入框、表格、标签页等&#xff0c;以及一些布局元素&#xff0c;如布局容器、分割线等。Element UI 的设计风格简洁&#xff0c;易于上手&…...

Laravel01 课程介绍以及Laravel环境搭建

Laravel01 课程介绍 1. Laravel2. mac开发环境搭建(通过Homebrew)3. 创建一个项目 1. Laravel 公司中面临着PHP项目与Java项目并行&#xff0c;所以需要我写PHP的项目&#xff0c;公司用的框架就是Laravel&#xff0c;所以在B站上找了一门课学习。 Laravel中文文档地址 https…...

面试redis篇-03缓存击穿

原理 缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮 解决方案一:互斥锁 解决方案二:逻辑过期 提问与回答 面试官 :什么是缓存击穿 ? 怎么解决 ? 回答: 缓存击穿的意思…...

k8s容器以及基础设施优化

1.硬件系统选型&#xff1a;宿主机通用配置16c/32GB/4网卡队列 2.os优化&#xff1a;单机支持百万tcp并发&#xff0c;/etc/sysctl.conf,/etc/security/limits.conf 3.k8s&容器层优化&#xff1a;性能优化initContainer 4.kube-dns优化&#xff1a;增大--cache-size,设置…...

蓝桥杯备赛系列——倒计时50天!

蓝桥杯备赛系列 倒计时50天&#xff01; 前缀和和差分 知识点 **前缀和数组&#xff1a;**假设原数组用a[i]表示&#xff0c;前缀和数组用sum[i]表示&#xff0c;那么sum[i]表示的是原数组前i项之和&#xff0c;注意一般用前缀和数组时&#xff0c;原数组a[i]的有效下标是从…...

jenkins配置ssh的时候测试连接出现Algorithm negotiation fail

背景&#xff1a;当jenkins升级后&#xff0c;同时ssh插件也升级&#xff0c;测试ssh连接的时候 出现的问题&#xff1a; com.jcraft.jsch.JSchAlgoNegoFailException: Algorithm negotiation fail: algorithmName"server_host_key" jschProposal"ecdsa-sha2-n…...

思维模型整合

思维模型整合 4P--- 4C思考模型能力圈模型 4P— 4C思考模型 在竞争激烈的今天&#xff0c;每个赛道都有众多可以为客户提供相同价值的对手&#xff0c;而赛道中的佼佼者之所以能打败大部分人&#xff0c;可能并不是他们能比别人更能讨好大众&#xff0c;而是因为在这个赛道它有…...

代理模式笔记

代理模式 代理模式代理模式的应用场景先理解什么是代理&#xff0c;再理解动静态举例举例所用代码 动静态的区别静态代理动态代理 动态代理的优点代理模式与装饰者模式的区别 代理模式 代理模式在设计模式中是7种结构型模式中的一种&#xff0c;而代理模式有分动态代理&#x…...

手机中有哪些逆向进化的功能

手机中有哪些逆向进化的功能&#xff1f;逆向进化是指明明很优秀的很方便的功能&#xff0c;却因为成本或者其他工业原因莫名其妙地给取消了。 逆向进化1&#xff1a;可拆卸电池-变为不可拆卸电池。 智能手机为了追求轻薄等原因&#xff0c;所以移除了可拆卸电池功能。将电池…...

LeetCode24.两两交换链表中的节点

参考链接&#xff1a;代码随想录&#xff1a;LeetCode24.两两交换链表中的节点 我这里使用了3个变量进行暴力交换&#xff0c;简单快捷&#xff01;但是有一点想不明白&#xff0c;return这里只能写dh->next,写返回head就结果不对了&#xff01;但是后面又想明白了&#xff…...

Eureka注册中心(黑马学习笔记)

Eureka注册中心 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图&#xff1a; 大家思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f; 有多个user-service实例地址&#xff0c…...

unity-firebase-Analytics分析库对接后数据不显示原因,及最终解决方法

自己记录一下unity对接了 FirebaseAnalytics.unitypackage&#xff08;基于 firebase_unity_sdk_10.3.0 版本&#xff09; 库后&#xff0c;数据不显示的原因及最终显示解决方法&#xff1a; 1. 代码问题&#xff08;有可能是代码写的问题&#xff0c;正确的代码如下&#xff…...

JWT(JSON Web Token)原理、应用与安全性分析

随着互联网的快速发展&#xff0c;Web应用的安全性越来越受到重视。在众多的安全认证技术中&#xff0c;JSON Web Token&#xff08;JWT&#xff09;凭借其简洁、自包含和传输安全的特点&#xff0c;被广泛应用于Web应用的用户身份验证和信息交换。 一、JWT的原理 JWT是一个开…...

Redis 缓存(Cache)

什么是缓存 缓存(cache)是计算机中的一个经典的概念在很多场景中都会涉及到。 核心思路就是把一些常用的数据放到触手可及(访问速度更快)的地方&#xff0c;方便随时读取。 这里所说的“触手可及”是个相对的概念 我们知道&#xff0c;对于硬件的访问速度来说&#xff0c;通常…...

ChatGPT回答模式

你发现了吗&#xff0c;ChatGPT的回答总是遵循这些类型方式。 目录 1.解释模式 2.类比模式 3.列举模式 4.限制模式 5.转换模式 6.增改模式 7.对比模式 8.翻译模式 9.模拟模式 10.推理模式 1.解释模式 ChatGPT 在回答问题或提供信息时&#xff0c;不仅仅给出…...

戏曲文化苑|戏曲文化苑小程序|基于微信小程序的戏曲文化苑系统设计与实现(源码+数据库+文档)

戏曲文化苑小程序目录 目录 基于微信小程序的戏曲文化苑系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 &#xff08;1&#xff09;戏曲管理 &#xff08;2&#xff09;公告信息管理 &#xff08;3&#xff09;公告类型管理…...

Mysql数据库主从集群从库Slave因为RelayLog过多过大引起服务器硬盘爆满生产事故实战解决

Mysql数据库主从集群从库slave因为RelayLog过多过大引起从库服务器硬盘爆满生产事故实战解决 一、MySQL数据库主从集群概念 MySQL数据库主从集群是一种高可用性和读写分离的数据库架构&#xff0c;它基于MySQL的复制&#xff08;Replication&#xff09;技术来同步数据。在主…...

QT基本组件

四、基本组件 Designer 设计师&#xff08;重点&#xff09; Qt包含了一个Designer程序&#xff0c;用于通过可视化界面设计开发界面&#xff0c;保存文件格式为.ui&#xff08;界面文件&#xff09;。界面文件内部使用xml语法的标签式语言。 在Qt Creator中创建文件时&#xf…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...