#ifndef MY_WIDGET_H
#define MY_WIDGET_H
#include <QWidget>
#include <QPushButton>
#include "subwidget.h" //子窗口头文件
class My_Widget : public QWidget
{
Q_OBJECT
public:
My_Widget(QWidget *parent = 0);
~My_Widget();
void mySlot();
void changwin();
void dealSub();
private:
QPushButton b1;
QPushButton *b2;
QPushButton b3;
Subwidget w;
};
#endif // MY_WIDGET_H
#ifndef SUBWIDGET_H
#define SUBWIDGET_H
#include <QWidget>
#include <QPushButton>
class Subwidget : public QWidget
{
Q_OBJECT
public:
explicit Subwidget(QWidget *parent = 0);
signals:
/*信号必须有signals关键词来声明
* 信号没有返回值,但可以有参数
* 信号就是函数的声明,只需声明,无需定义
* 使用: emit mySignal();
*/
void mySignal();
public slots:
void sendSlot();
private :
QPushButton b;
};
#endif // SUBWIDGET_H
#include "my_widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
My_Widget w; //执行My_Widget的构造函数
w.show();
return a.exec();
}
#include "my_widget.h"
#include <QPushButton>
My_Widget::My_Widget(QWidget *parent)
: QWidget(parent)
{
b1.setParent(this);
b1.setText("close");
b1.move(500,500);
b2 = new QPushButton(this);
b2->setText("abc");
connect(&b1, &QPushButton::pressed, this, &My_Widget::close);
/*&b1: 信号发出者,指针类型
* &QPushButton::pressed:处理的信号,&发送者的类名::信号名字
* this:信号接收者
* &My_Widget::close: 槽函数,信号处理函数 &发送者的类名::槽函数名字
*/
/*自定义槽,普通函数的用法
* Qt5:任意的成员函数,普通全局函数,静态函数
* 槽函数需要和信号一致(参数,返回值)
* 由于信号都是没有返回值,所以,槽函数一定没有返回值
*/
connect(b2, &QPushButton::released, this, &My_Widget::mySlot);
connect(b2, &QPushButton::released, &b1, &QPushButton::hide);
/*信号:短信
* 槽函数:接收短信的手机
*/
setWindowTitle("老大");
//this->setWindowTitle("老大");
b3.setParent(this);
b3.setText("切换到子窗口");
b3.move(50,50);
//显示子窗口
//w.show();
connect(&b3, &QPushButton::released, this, &My_Widget::changwin);
//处理子窗口的信号
connect(&w,&Subwidget::mySignal, this, &My_Widget::dealSub);
resize(400,300);
}
void My_Widget::mySlot()
{
b2->setText("123");
}
void My_Widget::changwin()
{
//子窗口显示
w.show();
//本窗口隐藏
this->hide();
}
void My_Widget::dealSub()
{
//子窗口隐藏
w.hide();
//本窗口显示
show();
}
My_Widget::~My_Widget()
{
}
#include "subwidget.h"
Subwidget::Subwidget(QWidget *parent) : QWidget(parent)
{
this->setWindowTitle("小弟");
b.setParent(this);//指定父对象
b.setText("切换到主窗口");
connect(&b, &QPushButton::clicked, this, &Subwidget::sendSlot);
resize(400,300);
}
void Subwidget::sendSlot()
{
emit mySignal();
}