QT的学习笔记 (一)

文章目录

  • 前言
  • 一、信号和槽
  • 二、控件
  • 总结


前言

软件:Qt Creator 4.10

QT是做UI的,主要做PC的UI界面

特点:

1.跨平台(windows  linux macos..)  2.开源

3.面向对象的,使用C++开发,执行效率高。

(qt 改进了C++)提供了全套的方法: UI  进程 线程  文件  数据 网络...


一、信号和槽

信号和槽:QT 特有的信号传输机制,用于对象之间的通信

信号signal:对象因为某种事件发出信号

槽slot  :信号的接收者,处理信号的对象 

一个信号可以发送给多个接收者,一个接收者可以接受多个信号

发送者发送信号---->接受者收到信号后,使用槽函数来处理信号

#include "widget.h"
#include "ui_widget.h"
#include    "signalslot.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)   //执行父亲背景
    , ui(new Ui::Widget) //创建ui对象:用户所有控件
{
    ui->setupUi(this);      //生成用户的拖拽

    ui->btnSure->setText("sure");
    /*
        这里你可以写 操作UI的代码

         this指向当前对象,就是 main{ Widget  w;}
         this->ui

    */
    ui->lineEdit->setText("hello world");


    /*信号和槽的演示,实现两个类(发送和接收类)  */
    class sender    snd;
    class receiver recv;

    //绑定了,当发送者发送指定信号的时候, qt会自动寻找接受者,并调用接收者的槽函数
    connect(&snd, SIGNAL( signal_snd(void)    )  ,&recv,  SLOT( slot_handle(void)    )    );
    connect(&snd, SIGNAL( signal_snddata(int) )  ,&recv,  SLOT( slot_handle_int(int) )    );
    connect(&snd, SIGNAL( signal_sndString(QString)),&recv,SLOT(slot_handle_string(QString)) );

    /*如何发送信号呢
        emit 发送者对象.信号函数();
    */

    emit snd.signal_snd();          /*  接受者对象recv的slot_handle被执行.    */
    emit snd.signal_snddata(56);
    emit snd.signal_sndString("hello world");
}

Widget::~Widget()
{
    delete ui;
}
#ifndef SIGNALSLOT_H
#define SIGNALSLOT_H

/*
    信号和槽,需要qt提供支持
    如何让类支持 信号和槽,
    1.你的class 要继承 QObject类---qt的基类:1.实现了信号和槽 2.
        当然你要包含他的头文件  #include <QObject>
    2.添加qt对C++的扩展
        在你的类中添加 宏 Q_OBJECT
*/

/*
	发送者,要发送信号
    信号,是一个特殊的函数
    如何实现信号函数:

*/

#include <QObject>

class sender :public QObject{
    Q_OBJECT

public:
    sender();

private:

signals:        //关键字,说明下面的都是 信号函数
    void signal_snd(void);      //信号,从来不需要##实现##的.  没有数据传递的
    void signal_snddata(int);   //信号,传递一个整数给对方
    void signal_sndString(QString);  //信号没有返回值
};

class receiver:public QObject{
    Q_OBJECT
public:
    receiver();

private:

public slots:  //关键字,声明下面的函数 是slot函数,专门用来处理信号的
    void slot_handle(void);  //slot 函数,专门用于处理 接收到的信号的,必须有实现
    void slot_handle_int(int);  //slot函数 ,绑定了发送者的 void signal_snddata(int);
    void slot_handle_string(QString);
};

#endif // SIGNALSLOT_H
#include "signalslot.h"
#include <qDebug>

sender::sender()  {}

receiver::receiver()  {}

void receiver::slot_handle()
{
    qDebug()<<"in slot_handle(void)"<<endl;
}

void receiver::slot_handle_int(int val)
{
    qDebug()<<"in slot_handle_int(int) "<<val<<endl;
}

void receiver::slot_handle_string(QString str)
{
    qDebug()<<"in slot_handle_string(QString) "<<str<<endl;
}

效果展示:

二、控件

1.按钮  QPushbutton

信号:    clicked() ---点击鼠标弹起的时候触发信号

                pressed()---mouse press down

                release()---鼠标释放的时候,和clicked一样

显示:

        setText( QString txt)

        setEnable(bool,show)        //  0/1   

手工UI :

        首先创建一个QPushbutton 对象,让对象显示在背景上

下面是代码,我把头文件和函数放在一起了,并让信号(点击、释放、按压)和槽函数建立连接    

// 头文件里面的槽函数
/*
    public slots:
    void btnLogClickedSlotFun();
    void btnLogpressedSlotFun();
    void btnLogreleasedSlotFun();

    void btnEnableSlotFun();

*/

 //########### you code ############
    ui->btnlog->setText("Sure");
    connect(ui->btnlog,SIGNAL(clicked()),this,SLOT(btnLogClickedSlotFun()));
    connect(ui->btnlog,SIGNAL(pressed()),this,SLOT(btnLogpressedSlotFun() ));
    connect(ui->btnlog,SIGNAL(released()),this,SLOT(btnLogreleasedSlotFun() ));

    connect(ui->btnEnable,SIGNAL(clicked()),this,SLOT(btnEnableSlotFun() ));

    connect(ui->btn1,SIGNAL(clicked()),this,SLOT(btn1Btnlog1SlotFun()));
    connect(ui->btn2,SIGNAL(clicked()),this,SLOT(btn2B
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值