QT day01 上

day01 上

参考文章

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;
}


posted @   NoAcalculia  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示