之前已经学习了简单的按钮设计,今天我们通过点击按钮事件来实现窗口之间的相互切换。
首先,要在已经有的项目之中创建一个类:
选中你的项目文件夹,右击,“添加新文件”,选中class直接choose,然后给你的类起个名字,并选中它的基类,如图所示。
点击下一步,查看一下添加到的项目是否有误,无误之后点击完成,一个新的类就创建好啦。
废话少说,直接上代码。
第一个窗口:widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QPushButton>
#include"child.h"
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QPushButton * b1; //两种方式创建按钮
QPushButton b2;
child w; //子窗口
public:
void change_win(); //切换窗口(爸爸切换到儿子)
void change_text(); //切换按钮文字
void change(); //从儿子那里切回来
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
b1 = new QPushButton("找儿子",this);
this->setWindowTitle("我是爸爸");
resize(500, 500);
b1->move(250,250);
b2.setParent(this);
b2.setText("点我!");
b2.resize(100,20);
//点击b1切换窗口
connect(b1, QPushButton::clicked, this, Widget::change_win);
//点击b2改变按钮文字
connect(&b2, QPushButton::clicked, this, Widget::change_text);
//接收子窗口传来的信号,然后调用change函数
connect(&w,child::mysignal,this,Widget::change);
}
Widget::~Widget()
{
}
void Widget::change_win()
{
this->hide();
w.show();
}
void Widget::change_text()
{
b2.setText("你是^(ˉ(∞)ˉ)^");
}
void Widget::change()
{
w.hide();
this->show();
}
第二个窗口:child.h
#ifndef CHILD_H
#define CHILD_H
#include <QWidget>
#include<QPushButton>
class child : public QWidget
{
Q_OBJECT
private:
QPushButton *b3;
public:
explicit child(QWidget *parent = nullptr);
signals:
void mysignal(); //要发出去的信号
public slots:
void myslot(); //槽函数
};
#endif // CHILD_H
child.cpp
#include "child.h"
child::child(QWidget *parent) : QWidget(parent)
{
b3 = new QPushButton("叫爸爸",this);
this->setWindowTitle("我是儿子");
resize(500,500);
b3->move(250,250);
//点击按钮找爸爸~
connect(b3, QPushButton::clicked, this, child::myslot);
}
void child::myslot()
{
emit mysignal(); //向爸爸发射信号
}
主函数:main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
运行结果:点击“找儿子”切换窗口并隐藏自己。点击“叫爸爸”切换回来。