其他分享
首页 > 其他分享> > Qt信号与槽之自定义信号

Qt信号与槽之自定义信号

作者:互联网

Qt信号与槽之自定义信号

本节在Qt信号与槽之标准信号的基础上继续实验,目的在于掌握自定义信号的使用

实验任务如下:

实验步骤如下:

  1. 新建子窗口SubWidget类

    • 右击SignalAndSlot项目 --> C++ --> C++ Class --> Choose
    • Base class: QWidget --> Class name: SubWidget --> 下一步 --> 完成
  2. 在mainwidget.h中为MainWidget类添加私有成员b3和subWin

    #include "subwidget.h"
    //...(略)
    private:
        QPushButton b1;
        QPushButton b2;
        QPushButton b3;  	//窗口切换按钮
        SubWidget subWin;	//子窗口
    
  3. 实现从主窗口切换到子窗口的功能

    • 在mainwidget.cpp中MainWidget类的构造函数里加入以下代码
        //按钮b3
        b3.setParent(this);
        b3.setText("切换到子窗口");
        b3.move(100, 0);
    
        connect(&b3, &QPushButton::pressed, this, &MainWidget::showSub);  //显示子窗口
    
    • 在mainwidget.h中声明showSub
    public:
    	void showSub();
    
    • 在mainwidget.cpp中定义showSub
    void MainWidget::showSub()
    {
        hide();
        subWin.show();
    }
    
  4. 实现从子窗口切换到主窗口的功能(涉及自定义信号)

    • 在subwidget.h中为SubWidget类添加私有成员b、mySignal以及sendSignal
    #include <QPushButton>
    //...(略)
    
    public:
        void sendSignal();
    
    private:
        QPushButton b;
    
    signals:
        void mySignal();
    
    
    • 在subwidget.cpp中设置窗口和按钮等,并实现sendSignal函数
    #include "subwidget.h"
    
    SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
    {
        //子窗口
        resize(400, 200);
        setWindowTitle("小弟");
        
        //按钮b
        b.setParent(this);
        b.setText("切换到主窗口");
        
        connect(&b, &QPushButton::pressed, this, &SubWidget::sendSignal);
    }
    
    void SubWidget::sendSignal()
    {
        emit mySignal();
    }
    
    • 在mainwidget.cpp中MainWidget类的构造函数里加入以下代码
    	connect(&subWin, &SubWidget::mySignal, this, &MainWidget::showMain);  //显示主窗口
    
    • 在mainwidget.h中声明showMain函数(略),接着在mainwidget.cpp中实现showMain函数
    void MainWidget::showMain()
    {
        show();
        subWin.hide();
    }
    
  5. 编译运行,测试实验效果

总结:

完整代码附录:

标签:SubWidget,窗口,MainWidget,自定义,void,QPushButton,信号,b3,Qt
来源: https://www.cnblogs.com/henx/p/14280320.html