Qt-------------->第一天,Qt介绍、信号和槽

本文介绍了QT跨平台的C++图形用户界面编程框架,详细讲解了如何创建QTUI工程,重点阐述了信号和槽机制的工作原理。通过实例展示了如何在QT中创建非UI工程,实现界面切换,并给出了一个简易计算器的实现,演示了信号与槽的关联用于控件间通信。
摘要由CSDN通过智能技术生成


1、QT介绍 


   QT是一种跨平台的C++图形用户界面编程框架;是一种C++类库;
   500多个c++类,core模块  gui模块 network模块 sql模块 。。。


2 、创建QT ui工程


    Q_OBJECT:支持信号和槽的机制
    QT UI界面上两个子控件如何实现数据通信?用信号和槽的机制


3、信号和槽


    信号:信息的发送方发出的指令
    槽(函数):信号的接收方对信号做出的响应动作(函数)
    特点: 1 专门用来响应信号的函数,当对应的信号发出,槽函数被系统自动调用
                2 是类的成员函数
                3 由 访问限定符 slots:声明的函数才是槽函数

                 
4、信号和槽的关联方式


    1 按钮转到槽(简单且常用)
    2 connect(信号的发送方,发出的信号,信号的接收方,接受方使用槽函数)
     QObject::connect
   3 画信号和槽
   4 emit和connect
     --->可以解决非ui界面的后台程序中两个对象之间的通信
      信号函数:是专门用来发送信号的。使用:emit 信号函数
    特点:1 是类的成员函数
               2 是专门用来发信号的,如何用:emit 信号函数
               3 被声明为signals:的函数为信号函数
               4 只有声明没有定义
               5 信号函数声明前没有访问限定符,而槽函数必须有



5、信号和槽的对应关系


   一个信号对应一个槽(普遍)
   一个信号对应另一个信号(较少)
   一个信号对应多个槽
   多个信号对应一个槽

6、创建非UI工程,手写代实现控件

界面切换

#include "widget.h"
#include <QApplication>//应用类
#include <QPushButton>//按钮类

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Widget w;//定义了一个窗体
#if 1
    //QPushButton btn(&w);//通过构造函数传参指定父对象
    QPushButton btn;//生成按钮
    btn.setParent(&w);//通过函数指定父对象
    btn.resize(75,30);//设置按钮大小
    btn.move(100,100);//设置按钮位置
    btn.setText("切换界面");//设置按钮名称
    btn.show();//显示按钮;

    QPushButton dtn;
    dtn.setParent(&w);
    dtn.setGeometry(100,200,75,30);
    dtn.setText("退出");
    dtn.show();

    QWidget *wnd=new QWidget;//定义了一个窗体
    wnd->resize(400,300);
    wnd->setWindowTitle("第二个窗体");

    QPushButton *b=new QPushButton;//生成按钮
    b->setParent(wnd);//设置b的父对象wnd
    b->setGeometry(100,200,130,30);//设置按钮的位置和大小
    b->setText("进入下一个窗口");//按钮名称

    QWidget *temp=new QWidget;//定义了一个窗体
    temp->resize(400,300);
    temp->setWindowTitle("第三个窗体");

    QPushButton *c=new QPushButton;//生成按钮
    c->setParent(temp);//设置b的父对象wnd
    c->setGeometry(100,200,130,30);//设置按钮的位置和大小
    c->setText("退出");//按钮名称


    //信号与槽的关联
    QObject::connect(&btn,SIGNAL(clicked(bool)),wnd,SLOT(show()));//点击切换界面,打开第二个窗体
    QObject::connect(&dtn,SIGNAL(clicked(bool)),&w,SLOT(close()));//点击退出,退出第一个窗体
    QObject::connect(b,SIGNAL(clicked(bool)),temp,SLOT(show()));//点击进入下一个窗口,打开第三个窗体
    QObject::connect(b,SIGNAL(clicked(bool)),wnd,SLOT(close()));//点击进入下一个窗口,打开第三个窗体时,同时退出第二个窗体
    QObject::connect(c,SIGNAL(clicked(bool)),temp,SLOT(close()));//点击退出,退出第三个窗体


#endif
    w.show();//显示窗口

    return a.exec();//事件循环,让窗口永驻
}

简易计算器

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

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

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

void Widget::on_pushButton_clicked()
{
    num1=ui->lineEdit->text().toDouble();//text().toDouble()将string类型转换为double类型
    num2=ui->lineEdit_2->text().toDouble();

    int index=ui->comboBox->currentIndex();//取出下拉框的索引值,默认从0开始

    switch(index)
    {
        case 0:
            result=num1+num2;
            break;
        case 1:
            result=num1-num2;
            break;
        case 2:
            result=num1*num2;
            break;
        case 3:
            result=num1/num2;
            break;
    }

    ui->lineEdit_3->setText(QString::number(result));//number()函数把对象的值转换为数字
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值