Qt学习笔记(第三天)^_^

4 篇文章 0 订阅

本人是菜鸟,这里记录的每天的学习内容


学习Qt 的第三天(笑着学


     一、学习内容:

                   1. 掌握自定义信号
                   2. 如何创建子窗口
                   3. 了解子窗口如何与主窗口之间进行信号的传递的


     二、目的:利用按钮来实现主窗口和子窗口的切换



     三、操作步骤:

                   一. 建立两个窗口(主窗口MainWidget.cpp和子窗口ZiWidget.cpp)
                   二. 在每个窗口中建立一个按钮 用来实现窗口之间的切换
                   三. 使用自定义信号,使子窗口可以发送信息到主窗口






一、建立两个窗口(主窗口MainWidget.cpp和子窗口ZiWidget.cpp)

         1.建立一个新的03_day.pro项目,Class name为MainWidget,其他和之前操作一样新建。
在这里插入图片描述
         2.在03_day.pro项目右键Add New
在这里插入图片描述
         3.选中c++Class项目,下一步
在这里插入图片描述
         4.子窗口类名设置为ZiWidget,下一步,然后会生成ziwidget.h头文件和ziwidget.cpp源文件
在这里插入图片描述
         5.现在我们已经有了两个窗口,但是我们运行只能显示一个窗口,就是MainWidget主窗口
         6.我把主窗口命名一下,前面讲过,在MainWidget.cpp中添加setWindowTitle,设置窗口标题为老大

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle("老大");
}

MainWidget::~MainWidget()
{
}


         7.在ZiWidget.cpp中把子窗口标题改为小弟

#include "ziwidget.h"

ZiWidget::ZiWidget(QWidget *parent) : QWidget(parent)
{

    setWindowTitle("小弟");
}

         8.现在我们来实现同时显示主窗口和子窗口
1)在主窗口(MainWidget)头文件中包含子窗口(ZiWidget)头文件;
2)在私有成员中定义子窗口对象w1;
3)在主窗口源文件中显示子窗口对象w1.show();
主窗口头文件:

#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include "ziwidget.h"//在主窗口(MainWidget)头文件中包含子窗口(ZiWidget)头文件
#include <QWidget>

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();

private:
    ZiWidget w1;//在私有成员中定义子窗口对象w1
};
#endif // MAINWIDGET_H

主窗口源文件:

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle("老大");
    w1.show();
}

MainWidget::~MainWidget()
{
}

最后我们来运行一下,现在可以显示两个窗口了,老大和小弟:
在这里插入图片描述



二. 在每个窗口中建立一个按钮 用来实现窗口之间的切换

1.在主窗口建立一个按钮
主窗口头文件

#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include "ziwidget.h"
#include <QWidget>
#include <QPushButton>

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();

private:
    QPushButton b1;
    ZiWidget w1;
};
#endif // MAINWIDGET_H

主窗口源文件

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle("老大");
    b1.setParent(this);
    b1.setText("切换到子窗口");
    b1.move(100,100);
    resize(300,200);//定义窗口大小
    w1.show();
}

MainWidget::~MainWidget()
{
}

子窗口头文件

#ifndef ZIWIDGET_H
#define ZIWIDGET_H

#include <QWidget>
#include <QPushButton>

class ZiWidget : public QWidget
{
    Q_OBJECT
public:
    explicit ZiWidget(QWidget *parent = nullptr);

signals:
    
private:
    QPushButton b2;

};

#endif // ZIWIDGET_H

子窗口源文件

#include "ziwidget.h"

ZiWidget::ZiWidget(QWidget *parent) : QWidget(parent)
{

    setWindowTitle("小弟");
    b.setParent(this);
    b.setText("切换到主窗口");
    b.move(100,100);
    resize(300,200);

}

运行之后得到 两个窗口 两个按钮
在这里插入图片描述



三、使用自定义信号,使子窗口可以发送信息到主窗口

1.隐藏主窗口,显示子窗口


在主窗口头文件中添加自定义槽函数 void change();

#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include "ziwidget.h"
#include <QWidget>
#include <QPushButton>

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();
    
    void change();

private:
    QPushButton b1;
    ZiWidget w1;
};
#endif // MAINWIDGET_H

在主窗口源文件中设置信号和自定义槽函数的实现

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle("老大");
    b1.setParent(this);
    b1.setText("切换到子窗口");
    b1.move(100,100);
    resize(300,200);//定义窗口大小
    //w1.show();
    connect(&b1,&QPushButton::released,this,&MainWidget::change);
}


void MainWidget::change()
{
    hide();//隐藏当前窗口
    w1.show();//显示子窗口
}
MainWidget::~MainWidget()
{
}



2.在子窗口头文件中自定义信号函数和自定义槽函数,并在子窗口源文件中设置按钮b2信号和槽的实; 并在主窗口头文件添加自定义槽函数,源文件中设定子窗口的信号和槽函数的实现


子窗口头文件

#ifndef ZIWIDGET_H
#define ZIWIDGET_H

#include <QWidget>
#include <QPushButton>

class ZiWidget : public QWidget
{
    Q_OBJECT
public:
    explicit ZiWidget(QWidget *parent = nullptr);
    void change();//自定义信号函数

signals:
    void mySignals();//自定义槽函数


private:
    QPushButton b;


};

#endif // ZIWIDGET_H

子窗口源文件

#include "ziwidget.h"

ZiWidget::ZiWidget(QWidget *parent) : QWidget(parent)
{

    setWindowTitle("小弟");
    b.setParent(this);
    b.setText("切换到主窗口");
    b.move(100,100);
    resize(300,200);
    connect(&b,&QPushButton::released,this,&ZiWidget::change);//按钮按下利用槽函数发送信号,由主窗口接收

}
void ZiWidget::change()
{
    emit mySignals();//使用信号
}

主窗口头文件

#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include "ziwidget.h"
#include <QWidget>
#include <QPushButton>

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();

    void change();
    void change1();

private:
    QPushButton b1;
    ZiWidget w1;
};
#endif // MAINWIDGET_H

主窗口源文件

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle("老大");
    b1.setParent(this);
    b1.setText("切换到子窗口");
    b1.move(100,100);
    resize(300,200);//定义窗口大小
    //w1.show();
    connect(&b1,&QPushButton::released,this,&MainWidget::change);
    connect(&w1,&ZiWidget::mySignals,this,&MainWidget::change1);//接收w1窗口的信号
}


void MainWidget::change()
{
    hide();//隐藏当前窗口
    w1.show();//显示子窗口
}
void MainWidget::change1()
{
    show();//显示当前窗口
    w1.hide();//隐藏子窗口
}
MainWidget::~MainWidget()
{
}

最后即可实现窗口的切换

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静诺安然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值