Qt信号与槽之标准信号

Qt信号与槽之标准信号

标准信号:Qt预定义好的信号

这里将通过实例演示标准信号的使用

实例任务如下:

  • 创建一个窗口w,其包含b1和b2两个按钮
  • 按钮b1的内容为"abc",当按下时会变为"123"
  • 按钮b2的内容为"close",当松开时关闭窗口

实验步骤如下:

  1. 新建项目

    • New Project --> Application --> Qt Widgets Application --> Choose

    • 设置项目名称(SignalAndSlot)和路径 --> 下一步 --> 下一步

    • 进行如下设置:

    • 下一步 --> 完成

  2. 在mainwidget.h中为MainWidget类添加私有成员b1和b2

    #include <QPushButton>
    //...(表示代码省略,下同)
    private:
        QPushButton b1;
        QPushButton b2;
    
  3. 在mainwidget.cpp中实现MainWidget类的构造函数

    MainWidget::MainWidget(QWidget *parent)
        : QWidget(parent)
    {
        resize(600, 400);
        setWindowTitle("老大");
        
        b1.setParent(this);
        b1.setText("abc");
        
        b2.setParent(this);
        b2.setText("close");
        b2.move(200, 200);
    
        connect(&b1, &QPushButton::pressed, this, &MainWidget::changeText);
        connect(&b2, &QPushButton::released, this, &MainWidget::close);
    }
    
  4. 经过以上步骤后,在changeText处会提示出错,这是因为还没在MainWidget中定义changeText,我们需要进一步声明和定义changeText

    • 在mainwidget.h中声明
    public:
    	void changeText();
    
    • 在mainwidget.cpp中定义
    void MainWidget::changeText()
    {
        b1.setText("123");
    }
    
  5. Ctrl+R编译运行,测试实验效果

完整代码如下:

  • mainwidget.h

    #ifndef MAINWIDGET_H
    #define MAINWIDGET_H
    
    #include <QWidget>
    #include <QPushButton>
    
    class MainWidget : public QWidget
    {
        Q_OBJECT
    
    public:
        MainWidget(QWidget *parent = 0);
        ~MainWidget();
        void changeText();
    
    private:
        QPushButton b1;
        QPushButton b2;
    };
    
    #endif // MAINWIDGET_H
    
  • mainwidget.cpp

    #include "mainwidget.h"
    
    MainWidget::MainWidget(QWidget *parent)
        : QWidget(parent)
    {
        //窗口
        resize(600, 400);
        setWindowTitle("老大");
    
        //按钮b1
        b1.setParent(this);
        b1.setText("abc");
    
        //按钮b2
        b2.setParent(this);
        b2.setText("close");
        b2.move(200, 200);
    
        //信号与槽:Qt对象之间通信的接口
        //信号与槽如同短信和手机:一个信号可以被多个槽接收
        //信号发出者、处理的信号、信号接收者、槽函数(信号处理函数)
        connect(&b1, &QPushButton::pressed, this, &MainWidget::changeText);
        connect(&b2, &QPushButton::released, this, &MainWidget::close);
    }
    
    MainWidget::~MainWidget()
    {
    
    }
    
    //可以像定义普通函数一样自定义槽函数
    //在Qt5中,槽可以为任意的成员函数,普通全局函数,静态函数
    //槽函数需要与信号一致(参数,返回值),因为信号都没有返回值,所以槽函数一定没有返回值
    void MainWidget::changeText()
    {
        b1.setText("123");
    }
    
  • main.cpp

    #include "mainwidget.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWidget w;  //执行MainWidget的构造函数
        w.show();
    
        return a.exec();
    }
    
posted @ 2021-01-15 05:50  夏恒  阅读(120)  评论(0编辑  收藏  举报