【1】Qt的按钮与信号槽 多加一个label的知识点

知识总结

做按钮要先在头文件创建指针,再在函数里分配内存
connect(按钮类型的指针,这个类里有的信号,要做出回应的载体的指针,要调用的槽函数)
//‘按钮类型的指针’只是发出信号的对象中的一种。下文在childrenwindow.cpp 用childrenWindow::hanshu2()这个新建的子函数发出了个信号
在父窗口要接收的话,发出信号的对象要写的不是子函数hanshu2() 也不是那个类childrenWindow 而是被复制了那个类的指针sonWindow 他发出了头文件里定义了的childrenWindow::sign_to_ba这个信号

视频教程

功能

在这里插入图片描述
召唤术会隐藏己方窗口。

代码

widget.cpp【用来创建父窗口的按钮和子窗口 还有两个信号,一个是自己父窗口的按钮 另一个是子窗口发来的信号(因为子窗口没有父窗口的指针没法操作父窗口显示)】

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->resize(400,300);//想不起函数可以从QWidget的Public Functions里找
    this->setWindowTitle("父窗口");//从帮助文件里ctrl+F搜索title
    sonWindow= new childrenWindow;
    sonWindow->show();
    sonWindow->setWindowTitle("子窗口");
    sonWindow->resize(500,200);
    button1=new QPushButton("子窗口召唤术",this);//快捷写法
    button1->show();

    connect(button1,&QPushButton::clicked,this,&Widget::hanshu1);
    //函数名就可以,别加小括号;前面加&更安全点,不过不加也能用
    //而且如果把this错写成sonWindow就是把对象搞错了,会报一大堆错。
    //clicked是信号 click是槽函数 把槽函数写进第二个传参里当然就没用了

    connect(sonWindow,&childrenWindow::sign_to_ba,this,&Widget::hanshu3);
    //注意 是sonWindow发出的信号 但信号是类的信号
    //sign_to_ba在发出的时候用槽函数发出,但是接收的时候不管槽函数是啥,只看信号
}
void Widget::hanshu1()//这里记得写Widget:: 不然这个子函数就和类无关了
{
    this->hide();
    sonWindow->show();
}
void Widget::hanshu3()
{
    this->show();
    sonWindow->hide();
}

"widget.h"

class Widget : public QWidget
{
    Q_OBJECT

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

    childrenWindow* sonWindow;

private:
    QPushButton * button1;
private slots:
    void hanshu1();
    void hanshu3();
};

childrenwindow.cpp 【右击 添加新文件 新建个class就可以创建类了,继承自QWidget(父窗口也是QWidget 要一样)要新建类的原因是我们得在新窗口创建按钮。(咋 一个按钮还嫌少)】

#include "childrenwindow.h"
//自己新创建的类一定要同样继承自QWidget
childrenWindow::childrenWindow(QWidget *parent) : QWidget(parent)
{
    button2=new QPushButton("父窗口召唤术",this);
    button2->show();

    connect(button2,&QPushButton::clicked,this,&childrenWindow::hanshu2);

}
void childrenWindow::hanshu2()
{
    //this->hide();//这句写这里也行 写hanshu3()里也行
    //sonWindow->show();//没有父窗口的指针 只能另外给信号
    emit sign_to_ba();//connect里只能写槽函数 不能直接发信号。所以就在槽函数里发信号 父窗口那边要connect一下这个信号
}

childrenwindow.h 【信号可以带参数,在上面发射的时候写参数,对应槽函数写传入参数就能接收】

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

signals:
      sign_to_ba();//忘记写void居然没事。
public slots:

private slots:
    void hanshu2();

private:
    QPushButton * button2;
};

挤进来一个label的知识点

  1. label可以用来点开网页
    在这里插入图片描述
  2. 标签的位置可以放个图片
    图片的资源的传入在第3篇
    标签的大小和图片的大小会干涉,所以最后一句很重要label_pic->adjustSize();也行

在这里插入图片描述

  1. 标签的位置放动态图
    最后一句是让动态图动起来
    在这里插入图片描述
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值