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()函数把对象的值转换为数字
}