先推荐一本书,《杀死一只知更鸟》,我对这本书印象最深的就是让我读到了孩子的天真善良。
看了很多博主写的,都不错,但是我决定自己写个清晰地。
一切代码敲不出的原因皆是逻辑问题。
首先要清楚一个逻辑问题
- 主页面点击按钮,主页面隐藏 ,子窗体显示。
- 子窗体点击按钮,发送信号,子窗体隐藏
- 主窗体接收信号,调用函数(即显示主窗体自己)
看代码之前,先在UI上添加按钮,转到槽。
主窗体.h
#ifndef WIDGET_H #define WIDGET_H #include#include "mainwindow.h" //包含子窗体的头文件 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); MainWindow son;//子窗体 private slots: void on_pushButton_clicked();//主窗体点击 跳转到子窗体 void show_myself(); //这个是收到信号源后 调用的函数 显示的主窗体自己 private: Ui::Widget *ui; }; #endif // WIDGET_H
子窗体.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #includenamespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_pushButton_clicked();//按钮点击发送信号 自己隐藏 signals: void showMain(); //自定义信号 是一个信号不需要定义 private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
主窗体.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle("主窗体");
connect(&son,SIGNAL(showMain()),this,SLOT(show_myself()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
this->hide(); //隐藏主窗体
son.show(); //显示子窗体
}
void Widget::show_myself()
{
this->show();
//son.hide();
}
子窗体.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("子窗体");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
//返回主界面
emit showMain(); //发射showMain信号
this->hide(); // 隐藏
}
好了,到此结束。一切皆逻辑。



