首页 > 其他分享 >day01

day01

时间:2023-08-06 17:22:27浏览次数:36  
标签:窗口 QT day01 b2 b1 信号 mywidget

day01 上

参考文章:https://blog.csdn.net/qq_41580422/article/details/122770200

onekeybatch

快捷键

//快捷键
//注释  ctrl + /
//运行  ctrl + r
//保存  ctrl + s
//编译  ctrl + b
//查找  ctrl + f
//字体缩放 ctrl+ 鼠标滚轮
//帮助文档  F1
//自动对齐  ctrl + i
//同名之间的.h 和.cpp文件的切换 F4
//函数声明与定义 F2

命名规范

类名:单词首字母大写,单词和单词之间连接,无须连接字符
img
函数名字 ,变量名:第二个单词首字母大写,单词和单词之间连接,无须连接字符
img
QT内置的类型,头文件和类命名同名
img

第一个QT程序

这里直接借鉴大佬做的图
img

img
QWidget是Qt中最基本的用户界面类,所有组件都继承自它。
QMainWindow是用于创建应用程序主窗口的类,可以包含菜单栏、工具栏和状态栏等。
QDialog是用于创建对话框的类,用于与用户进行简短交互或显示信息。

pro文件

加QT的模块

QT       += core gui

如何查询该类属于哪个模块 (即动态库)

帮助文档  F1
找到类,并点击按F1

img

兼容以前的版本QT5可以不加

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

版本不一样,不过大概就是这个意思,大佬解释全了
img

窗口添加按钮

1.先在.h文件中添加 QPushButton变量

class mywidget : public QWidget
{
    Q_OBJECT

public:
    mywidget(QWidget *parent = nullptr);
    ~mywidget();

private:
    Ui::mywidget *ui;
    QPushButton b1;
    QPushButton*b2;
};

2.在.cpp文件中mywidget构造函数中添加,

mywidget::mywidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::mywidget)
{
    ui->setupUi(this);
    //如果想让窗口在另外一个窗口里面(也就是依附),需要给该窗口指定父窗口
    b2=new QPushButton("hello QT",this);
    //b2->setText("hello QT");
    b2->show();

    b1.setText("老二");
    b1.setParent(this);

    b1.move(100,100);//移动位置 (0,0)就是左上角,向右(x)和向下(y)皆为正

}

img

回收机制

img

创建自己的button类

右击添加(add new)
img
img
基于什么类派生要想清楚,下面是可以改的
img
因为父窗口是同一个所以可以不改

下面是一些接口去改进窗口的东西,可按F1查看文档

 this->setWindowTitle("你好");//设置窗口标题
   this->setFixedSize(200,300);//设置窗口固定
   //this->setWindowIcon()    用于设置窗口的图标

标准信号和槽

借鉴大佬的图
img
如果不懂,这边有代码解释

信号槽(Signals and Slots)是Qt框架中用于实现对象间通信的机制。它允许一个对象(信号发出者)在特定事件发生时发送信号,而其他对象(槽接收者)可以通过连接信号和槽来接收并响应这些信号。

以下是一个简单的信号槽机制的示例:

1.定义一个信号发出者类(Sender Class):

class Sender : public QObject
{
    Q_OBJECT

public:
    Sender() {}

signals:
    void signalA();  // 声明一个信号

public slots:
    void slotB() { qDebug() << "Slot B called"; }  // 声明一个槽函数
};

2.定义一个信号槽接收者类(Receiver Class):

class Receiver : public QObject
{
    Q_OBJECT

public slots:
    void slotC() { qDebug() << "Slot C called"; }  // 声明一个槽函数
};

3.创建对象并连接信号和槽:

Sender sender;
Receiver receiver;

QObject::connect(&sender, &Sender::signalA, &receiver, &Receiver::slotC);

在上述代码中,我们创建了一个信号发出者对象sender和一个信号槽接收者对象receiver。然后,我们使用QObject::connect函数将信号signalA和槽函数slotC连接起来。
4.发送信号:

emit sender.signalA();

通过emit关键字,我们可以在适当的时候发送信号。一旦信号被发出,与之连接的槽函数将被调用。

信号槽机制的图示如下所示:

+-------------+          +-----------------+
|  Sender     |          |    Receiver     |
|             |          |                 |
| +---------+ |          | +-------------+ |
| |         | | signalA  | |             | |
| |         | +--------->| |    slotC    | |
| |         |            | |             | |
| +---------+            | +-------------+ |
+-------------+          +-----------------+

在这个示例中,当sender对象发出signalA信号时,与之连接的receiver对象的slotC槽函数将被调用。

信号槽机制使得对象间的通信更加灵活和解耦,可以方便地实现事件的触发和响应。一个信号可以连接到多个槽函数,一个槽函数也可以连接到多个信号,从而实现复杂的交互逻辑。

实例代码

#include "mywidget.h"
#include "ui_mywidget.h"

mywidget::mywidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::mywidget)
{

    ui->setupUi(this);
    //如果想让窗口在另外一个窗口里面(也就是依附),需要给该窗口指定父窗口

    this->setWindowTitle("你好");//设置窗口标题
    this->setFixedSize(200,300);//设置窗口固定
    //this->setWindowIcon()    用于设置窗口的图标

    b2=new QPushButton("hello QT",this);
    //b2->setText("hello QT");
    b2->show();

    b1.setText("老二");
    b1.setParent(this);

    b1.move(100,100);//移动位置 (0,0)就是左上角,向右(x)和向下(y)皆为正

    Mybutton *btn =new Mybutton(this);
    btn->move(200,0);

    //需求 按b1关闭窗口
    //connect(b1,发出的信号,this,处理信号的槽函数);
    connect(&b1,&QPushButton::clicked,this,&mywidget::close);
    /*
     b1:信号发出者,此参数是一个指针
     &Qpushbutton::clicked 信号发出者,内部的一个信号
      格式: &+信号发出者类的名字+::信号的名字
     this:信号接收者,此参数是一个指针
     &mywidget::close:信号的处理函数,属于this 
      
    */
}


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


标签:窗口,QT,day01,b2,b1,信号,mywidget
From: https://www.cnblogs.com/yjydxuexi/p/17609604.html

相关文章

  • Linux环境编程day01--库与环境变量
    UNIX系统简介:1970年于美国贝尔实验室,作者肯.汤普逊和丹尼斯.里奇UNIX是最早的多用户、多任务、支持多种CPU架构,高稳定性、高可靠性、高安全性既能构建大型关键型业务系统的服务器(银行、电信公司等),也能支持移动嵌入式设备Minix是一种开源的基于微内核架构的类UNIX计算机操作......
  • 20天 hot 100 速通计划-day01
    哈希1.两数之和给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=......
  • day01_springboot综合案例
    springboot项目课程目标1.【掌握】SSM整合2.【掌握】使用SSM完成查询3.【理解】AdminLTE4.【理解】理解SSM综合案例表的结构springboot环境搭建搭建工程pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="htt......
  • Qt-day01
    //不用手动进行回收?://条件一:在QT中建立了内存回收机制从QBject派生的类,//条件二:指定父类,父类对象析构的时候,先析构子类对象 #include"mywidget.h"#include<QApplication>intmain(intargc,char*argv[]){//QApplication应用程序类每个程......
  • [代码随想录]Day01-数组part01
    题目:704.二分查找思路:二分查找一般是在有序的数组中查找指定的值,单纯的查找值,把数组跑一遍的复杂度为O(n)。二分查找每次把范围缩小一半,我们每次都去中间的值,有以下三种情况:如果mid位置的值比target大,那么target应该在mid左侧的位置(由小到大排序情况下)如果mid位置的值比t......
  • day01课程回顾
    day02:Java相关概念一、回顾程序:解决问题编写的一系列计算机指令的有序集合计算机语言低级语言机器语言汇编语言高级语言面向过程面向对象:JavaJava发展Java之父:詹姆斯高斯林1996年JavaJDK5.0是Java的分水岭我们用JDK8DOS命令Java特......
  • css学习Day01
    css学习Day01css语法选择器{​ 声明1;​ 声明2;​ 声明3;}一、css四种导入方式行内样式<h1style="color:red">标题</h1>内部样式<head><style>h1{color:green}</style></head>外部样式链接式:......
  • Python基础day01
    1.编码1.1计算机中所有的数据本质上由0和1来存储。注意:以什么编码保存就以什么编码打开否则会乱码。1.2pycharm运行地址:前面:python解释器地址后面:py文件地址 默认python解释器以'utf-8'编码打开文件。2.输入#将结果呈现给客户,print会在尾部加换行符print("xxx")#en......
  • java学习day01
    Day01java笔记1.什么是程序程序:为了让计算机执行某些操作或者解决某个问题而编写的有序集合计算机语言(1)低级语言机器语言只认识01汇编语言(2)高级语言面向过程语言:c语言面向对象语言:java,python,c#等2.人机交互控制台常用命令:(1)切换盘符D:+回车(2)dir 查......
  • 代码随想录训练营 Day01- 数组(上)
    概述第一天主要学习的是数组相关的内容,相关学习的内容包括数组的基本特性的学习,二分搜索方法的学习。数组特点数组的基本特点包括:下标从0开始内存连续性(Java中定义数组需要直接声明其空间大小)数组元素不可以删,只能覆盖ArrayList底层是数组实现,其实际上应该叫一......