QT笔记2

书接上回,没有基础或者看不懂的童鞋可以速览一下QT笔记1_八两x的博客-CSDN博客

这次我们主要实现两个窗口之间的切换功能

1 新建窗口

        ①右键点击工程文件夹,选择“添加新文件”或Add New...(版本不一样显示的不一样)

         ②选择C++ -> C++ Class,然后点击choose

         ③这里的Name可以随便写,我写的SubWidget,但是Base class一定要选择QWidget

         ④接着下一步,完成,就有新窗口啦。工程文件也会出现下边的文件:

2 实现两个窗口切换

 新建好窗口后,我们的目标变成了:点击主窗口的某个按钮,可以显示子窗口,主窗口隐藏;点击子窗口的按钮,主窗口显示,子窗口隐藏

2.1 主窗口->子窗口

        ①对mainwidget.h操作。首先,声明一个新按钮b3;其次,声明一下子窗口的存在,告诉主窗口:你有一个小弟了;最后,添加一个自定义槽函数changeWin()用来执行切换窗口的任务。

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include "subwidget.h"  //子窗口头文件

class MainWidget : public QWidget
{
    Q_OBJECT

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

    void myslot();
    void changeWin();//切换窗口的槽函数

private:
    QPushButton b1;
    QPushButton *b2;
    QPushButton b3;    //新的b3按钮

    SubWidget w1;        //声明子窗口w1
};

#endif // MAINWIDGET_H

        ②对mainwidget.cpp操作。

        首先定义changeWin函数,代码+解释如下

void MainWidget::changeWin()
{
    //子窗口显示
    w1.show();
    //本窗口隐藏
    this->hide();
}

        其次,初始化b3,再写信号与槽函数,代码+解释如下

    b3.setParent(this);    //设置b3的父类
    b3.setText("切换到子窗口");    //设置b3的文本
    b3.move(50, 50);        //设置b3的位置

    connect(&b3, &QPushButton::released, this, &MainWidget::changeWin);//当b3放开时,切换窗口

        到此为止,我们就实现了通过主窗口调用子窗口。

2.2 子窗口->主窗口

        子窗口调用主窗口要麻烦得多,就像老板可以说:小李,给我拿个快递。你不能给老板说:老李,给我买包烟去。你只能说:老板,你看这个方案可不可行,老板感兴趣就会处理,不感兴趣直接置之不理。子窗口和主窗口的关系一个道理。

        主窗口可以自由调用子窗口,但是子窗口要调用主窗口要发送申请信号,主窗口可以选择处理或者不处理。

        ① 对subwidget.h进行操作。首先定义一个按钮b,再定义一个槽函数来实现发送信号,最后定义一个信号。代码如下

#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>
#include <QPushButton>

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

    void sendSlot();    //发送信号的槽函数

signals:
    /* 信号必须有signals关键字来声明
     * 信号没有返回值,但可以有参数
     * 信号就是函数的声明,只需声明,无需定义
     * 使用:emit mySignal();
    */

    void mySignal();    //被发送的信号

public slots:

private:
    QPushButton b;        //声明的按钮
};

#endif // SUBWIDGET_H

        ②对subwidget.cpp进行操作。 先初始化按钮,再定义信号与槽,最后槽函数发送信号。

#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
    this->setWindowTitle("Bro");    //设置子窗口名称
    b.setParent(this);              //设置子窗口位置
    b.setText("切换到主窗口");       //设置按钮文本

    connect(&b, &QPushButton::clicked, this, &SubWidget::sendSlot);    //按钮点击时,触发sendslot函数

    resize(400, 300);            //将页面大小控制为400*300
}

void SubWidget::sendSlot()
{
    emit mySignal();        //发送mySignal信号;发送使用emit
}

        接下来就是看主窗口如何处理这个信号了

        ③在mainwidget.h中添加一个信号处理函数的声明。

public:
void dealSub();

        ④在mainwidget.cpp中处理信号。首先在mainwidget函数里添加这么一段话:

        

connect(&w1, &SubWidget::mySignal, this, &MainWidget::dealSub);
//当子窗口w1发送信号mySignal时,当前窗口(this)执行dealSub

        ⑤定义dealSub

        

void MainWidget::dealSub()
{
    //子窗口隐藏
    w1.hide();
    //主窗口显示
    this->show();
}

到此为止,一个主窗口和子窗口互相调用的功能就实现啦。

参考课程:黑马程序员Qt(第一部分)_哔哩哔哩_bilibili

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值