QT的基本语法及其使用(二)

  1. 信号与槽函数概念:

信号与槽函数是QT编程的基础,信号指的是在特定条件下被发射出去的事件,比如QPushButton最常见的信号就是鼠标单击信号。当信号被发出去之后,我们需要对这个信号进行响应处理,而这个响应信号处理函数就是槽函数了,槽函数可以和信号相关联,当信号被发送,槽函数自动执行。

//connect(信号的发送者,发送的信号,信号的接收者,接收者执行的槽函数)
首先在.h中申明函数
private slots:
    void on_clicked_btn1();
//第一种写法
//connect(ui->btn1.&QPushButton::clicked .this,&widget::on_clicked_btn1);
//第二种写法
connect(ui->btn1,SIGNAL(clicked()),this,SLOT(on_clicked_btn1()));

 通过信号和槽函数发送信息
//1:自定义信号,通俗的讲 谁触发发送信号事件就在谁那里写
//自定义信号 --信号也是一个函数,但是这个函数不需要去实现
signals://信号的声明
    void dataChange(QString acount);
//2:自定义槽函数
public slots:在接收者头文件中创建
    void setData(QString acount);
//3:连接,信号与槽的关联
void MyWin::on_Sing_in_clicked()
{
    //this是为了等下跳转页面的时候返回原页面而给的指针
    MainWindow *my = new MainWindow(this);
    connect(this,&MyWin::dataChange,my,&MainWindow::setData);
    //发射信号,可以带参数
    //emit是发射信号的关键字
    //格式 emit 信号(参数);
    emit dataChange(ui->id->text());
    my->show();
    this->hide();
}

总结:

信号和槽中,槽函数的调用是通过信号来完成,所以槽函数的参数类型要跟信号函数的参数类型保持一致

槽的参数个数不大于信号的参数个数

槽函数的调用,必须要跟对应的信号建立连接关系,通过connect函数来实现连接

一个信号可以跟多个槽函数相关联

多个信号可以执行同一个槽函数

一个信号可以跟另一个信号相关联

使用信号与槽函数机制必须在类的声明中添加Q_OBJECT宏,因为只有标记该宏的头文件才能让元对象编译器去处理

槽函数可以当作普通函数使用

QWidget *parent = this->parentwidget();
dynamic_cast<TeacherMWin>(parent);        //强转为TeacherMWin类型
  1. QLabel标签:

作用:1、显示文本,用于提示

2、显示图像(静态图像(png bmp jpeg) 动态图像(gif));

显示静态图像:

QPixmap pic("F:/qt_project/333.bmp");  //QPixmap是一个图片类
//根据显示图像的控件大小 (label的大小)动态 调整图片的大小
pic = pic.scaled(ui->label->size());             //有返回值
ui->label->setPixmap(pic);

显示动态图像

QMovie *movie = new QMovie("F:/qt_project/111.gif");    //QMovie 是QT的电影 或者动画类
movie->start();                    //启动动画
//根据显示动画的控件大小 (label的大小)动态 调整动画的大小
movie->setScaledSize(ui->label->size());        //无返回值
ui->label->setMovie(movie);

创建一个工程,将图片放进去,可以在不同主机上运行显示图片:

Add new->Qt->Qt Resourse file->Add Prefix(生成路径)->Add Files(加载图片进工程)->保存->右击工程图片复制路径,写入代码的路径区。

  1. 进度条,水平滑动条,垂直滑动条:

input Widgets->horizontal Slider(水平滑动条)

input Widgets->vertical Slider(垂直滑动条)

Display Widgets->progress Bar(进度条)

获取滑动条数据方式:

void Widget::on_verticalSlider_red_sliderMoved(int position)
{
    QString red = QString::number(position);    //将int类型转换为QString类型
    ui->lineEdit_red->setText(red);
}

setStyleSheet(); //修改样式表 函数

当遇到多个按钮槽函数执行的都是相同的功能,可以将这多个按钮的单击信号都关联同一个槽函数

for(int i = 0; i<m_List.size(); i++)
{
    connect(m_List.at(i),&QPushButton::clicked,this,&Widget::on_btn_1_clicked);
}

void Widget::on_btn_1_clicked()
{
    //1、确定这个槽函数 到底是 哪个按钮(信号的发送者) 触发的
    QPushButton *sender = (QPushButton*)this->sender();
    //2、获取按钮的颜色样式
    QString sty = sender->styleSheet();
    //生效于测试框
    ui->label_color->setStyleSheet(sty);
}
  1. 定时器的基本使用

  1. 包含头文件和 创建定时器对象

  1. 创建槽函数,并且关联timeout信号

  1. 启动定时器,并指定间隔发送信号的时间

  1. 停止定时器

#include "widget.h"
#include "ui_widget.h"
//m_time在类中定义
QTimer *m_time;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    m_time = new QTimer;

    //关联槽函数
    connect(m_time, &QTimer::timeout, this, &Widget::on_updataUI_timeout);
}

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

void Widget::on_updataUI_timeout()
{
    static int val = 0;
    
    ui->label->setText(QString::number(val++));
}


void Widget::on_pushButton_clicked()
{
    m_time->start(1000);//打开定时器
}

void Widget::on_pushButton_2_clicked()
{
    m_time->stop();    //停止定时器
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值