QT各版本下载:http://download.qt.io/archive/qt/#include "MyWidget.h"
#include
#include//打印
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
b1.setParent(this);//把一个按钮放到另一个窗体上,this是主窗口
b1.setText("close");
b1.move(100,100);
b2=new QPushButton(this);//把一个按钮放到另一个窗体上
b2->setText("切换成123并隐藏close");
connect(&b1,&QPushButton::pressed,this,&MainWidget::close);
/*&b1:信号发出者,指针类型
* &QPushButton::pressed:处理的信号。&发送者的类名::信号名字
* this:信号接收者
* &MainWidget::close:槽函数,信号处理函数 &接收者的类名::槽函数名字
*/
/*自定义槽:普通函数的用法
* QT5:任意的成员函数,普通全局函数,静态函数
* 槽函数需要和信号一致(参数,返回值)
* 由于信号都没有返回值,所以,槽函数一定没有返回值
*/
connect(b2,&QPushButton::released,this,&MainWidget::mySlot);
connect(b2,&QPushButton::released,&b1,&QPushButton::hide);
/*信号:短信
* 槽函数:接收短信的手机
*/
setWindowTitle(("老大"));
// this->setWindowTitle("老大");//完全和上一个等价
b3.setParent(this);
b3.setText("切换子窗口");
b3.move(50,50);
// 显示子窗口
// subWin.show();
connect(&b3,&QPushButton::released,this,&MainWidget::changeWin);
//处理子窗口的信号
// void(SubWidget::*funSingle)()=&SubWidget::mySignal;//声明没有返回值的信号的槽函数, void(SubWidget::*funSingle)()用的是函数指针
// connect(&subWin,funSingle,this,&MainWidget::dealSub);//主函数接收到子窗口的响应后,执行槽函数dealsub
// void(SubWidget::*testSingle)(int,QString)=&SubWidget::mySignal;//声明槽函数,其必须有整型和字符类型
// connect(&subWin,testSingle,this,&MainWidget::dealSlot);//dealSlot是槽函数,信号给槽函数传参
//QT4连接
//QT4必须有slots:关键字来修饰
//QT4槽函数
connect(&subWin,SIGNAL(mySignal()),this,SLOT(dealSub()));//这是另一种方法,方便些 SIGNAL是信号 SLOT是槽
connect(&subWin,SIGNAL(mySignal(int,QString)),
this,SLOT(dealSlot(int,QString)));
//SIGNAL SLOT 将函数名字转换成字符串 不进行错误检查,比如将mySignal写成mySi,不报错
resize(400,300);
}
void MainWidget::dealSlot(int a, QString str)//打印,头文件添加#include
{
//如果DEBUG后250后面显示乱码,就将qDebug()<
//str.toUtf8()->字节数组QByteArray
//...data()->QByteArray->char *
qDebug()<//打印
}
void MainWidget::mySlot()
{
b2->setText("123");
}
void MainWidget::changeWin()
{
//子窗口显示
subWin.show();
//本窗口隐藏
this->hide();
}
void MainWidget::dealSub()
{
//子窗口隐藏
subWin.hide();
//本窗口显示
show();
}
MainWidget::~MainWidget()
{
}