QT笔记1

 01 创建文件

首先创建程序,命名(我的命名为MainWidget)、选择保存位置,然后无脑下一步就可以了

这时候会有三个文件:

mainwidget.h

mainwidget的头文件,所有在mianwidget.cpp中使用的函数必须要在这里声明,不然运行时候不会起作用的

main.cpp

主函数

mainwidget.cpp

窗口函数,添加按钮,窗口功能都在这里实现

注意:     ①在实现功能之前,在 工具 ->选项 中,选择文本编辑器,并选择UTF-8编码模式

                ②写mainwidget.cpp的时候,按F4可以跳转到.h文件,很方便

 

 02功能实现

2.1 一个值得注意的小错误

#include "mainwidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWidget w;   //先执行构造函数,执行MainWidget的构造函数
    w.show();

    return a.exec();    //等待用户操作
}

main.cpp 就这么几行,在中间MainWidget时候,就会跳转到mainwidget.cpp去执行构造函数(就是窗口各个功能的实现)

//mainwidget.cpp函数
#include "mainwidget.h"
#include <QPushButton>

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    //函数功能的实现,这里是写了一个按钮
    QPushButton b1;    //创建一个按钮b1
    b1.setParent(this);//把按钮的父类指定为这个窗口
    b1.setText("^_^"); //把按钮的文本设置为^_^
}

MainWidget::~MainWidget()
{

}

开始基本上都会这么写,但是程序跑起来之后会发现没有作用,这是为什么呢?

这是因为我们在运行程序时候,这个按钮就变成局部变量了,只有在头文件中声明之后才可以在显示框里显示。

2.2 实现两个按钮

首先我们实现两个按钮的编写

先在.h文件里声明按钮

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = 0);
    ~MainWidget();

private:
    QPushButton b1;    //声明按钮b1
    QPushButton *b2;   //声明按钮b2
};

#endif // MAINWIDGET_H

然后不用管main.cpp直接写mainwidget.cpp

#include "mainwidget.h"
#include <QPushButton>    //包含按钮操作的头文件


MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    b1.setParent(this);    //指定b1的父对象为此窗口,就是说b1在这个窗口上显示
    b1.setText("123");     //设定b1的文本为123
    b1.move(100, 100);     //将b1挪动到100,100像素点的位置

    b2 = new QPushButton(this);    //因为b2是指针,要分配空间,就这样分配
    b2->setText("abc");            //设定b2的文本
}

MainWidget::~MainWidget()
{

}

运行后就可以得到两个按钮

 2.3信号和槽(signal和slot)

       2.3.1 使用已经定义好的信号和槽函数

        信号和槽函数,举个例子:你按下去一个按钮就是发送了一个信号,发送这个信号想干什么呢?可以关闭这个窗口,也可以最小化等等。而信号只要发出来了,不管这个程序在干嘛,都要执行相应的槽函数(就像不论你是在打游戏还是看书,你妈叫你,你都得去一样,至于是拖地扫地还是吃饭,由你妈说了算^_^)。

         不知道用什么槽函数,可以参考2.4查找功能

        这里我们实现的功能是:按下b1按钮,关闭窗口

        基于之前的程序,在mainwidget.cpp里加这么一行就可以了

connect(&b1 ,&QPushButton::pressed, this,&MainWidget::close);

         这句话什么意思呢?

        &b1:信号发出者,指针类型

        &QPushButton::pressed:处理的信号, &发送者的类名::信号名字

        this:信号接受者,指针类型

        &MainWidget::close:槽函数, &接受者的类名::槽名字

        一句话就是:看“b1”有没有发出“pressed”按下这个信号,如果发出了,那么“this”这个主窗口,就要被“close”关闭了

        整个mainwidget.cpp函数如下,嫌麻烦可以跳过:

#include "mainwidget.h"
#include <QPushButton>


MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    b1.setParent(this);
    b1.setText("123");
    b1.move(100, 100);

    b2 = new QPushButton(this);
    b2->setText("abc");

    connect(&b1 ,&QPushButton::pressed, this,&MainWidget::close);
    /* &b1:信号发出者,指针类型
     * &QPushButton::pressed:处理的信号, &发送者的类名::信号名字
     * &MainWidget::close:槽函数, &接受者的类名::槽名字
    */
}

MainWidget::~MainWidget()
{

}

   2.3.2 自定义槽函数

        除了他给的槽函数之外,我们还可以自定义槽函数,实现我们想实现,但是没有的功能。

        比如:我想实现按下按钮,让b2这个按钮的文字改变

        那么按照上边的逻辑来说,我们的connect函数结构不用变,就是把最后一个接收的槽函数自定义一下就可以了。

        ①首先,我们要在.h文件里声明槽函数,不然就会像2.1一样愚蠢-_-。只需要在public下自定义一个void myslot();就可以了

public:
    MainWidget(QWidget *parent = 0);
    ~MainWidget();

    void myslot();    //自定义槽函数

        ②接下来要在mainwidget.cpp函数里写myslot函数的功能

void MainWidget::myslot()
{
    b2->setText("456");    //将b2的文本更改为456
}

         ③在mainwidget函数里写下调用文件就可以啦

connect(b2, &QPushButton::released, this, &MainWidget::myslot);

        最后就实现功能了

        2.3.3 信号和槽是一一对应的吗

        我们可以把信号看做短信,槽函数看做接收短信的人,那么我们可以发现,一个信号可以对应多个槽(就像老板群发消息,我们就得干自己相应的活一样);一个槽也可以对应多个信号(就像很多老板问我要材料一样,不管谁要都得给)。

2.4查找功能

将光标放在某一个定义上,这里以QPushButton为例,按F1,再按F1,就会出现帮助界面

 这时候按F1

再按F1

 就会跳到帮助文档 

 帮助文档里可以看到它包含的内容,我们要找到signal不在里边,说明可能是继承的,就去他的父类里找

 这个就是他的父类,点进去

 我们发现有signal了,点进去

这些就是signal对应的槽函数,看到那个就可以点进去看说明,我们看pressed()

 void表示信号没有返回值,解释说明:按下时信号被发射

 

这是我原创的笔记,学习的课程是:黑马程序员Qt(第一部分)_哔哩哔哩_bilibili

 大家有问题欢迎留言~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值