Qt5教程: (2) 信号与槽

1. 新建工程

新建一个"Qt Widgets Application"工程


2. 添加按钮

一个Qt工程会有很多个控件, 如果把逻辑代码都写在main函数里, main函数会非常长, 而且不方便维护, 所以最好把代码都在别的Sources中实现.

2.1 修改mainwidget.h文件

在 mainwidget.h 文件中添加头文件, 然后定义两个按钮, 一个正常定义, 一个使用指针:

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>  // 添加头文件

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = 0);
    ~MainWidget();
    
private:
    QPushButton b1;  // 按钮1
    QPushButton *b2;  // 按钮指针2
};

#endif // MAINWIDGET_H

2.2 修改mainwidget.cpp文件

在cpp文件中指定按钮父对象, 按钮显示内容, 按钮位置:

#include "mainwidget.h"


MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    b1.setParent(this);
    b1.setText("Button1");
    b1.move(50, 50);

    b2 = new QPushButton(this);
    b2->setText("Button2");
    b2->move(150, 50);
}

MainWidget::~MainWidget()
{

}

保存后运行:

3. 信号和槽

这个时候我们点击按钮是没有反应的, 如果希望响应按键点击这个事件, 就需要使用Qt的信号与槽.
我们把Button1的名字改为"Close", 然后我们希望点击"Close"按钮就关闭窗口, 这就需要将按钮1和窗口先建立连接:

connect(&b1, &QPushButton::clicked, this, &MainWidget::close);

&b1: 信号发出者, 指针类型; 这里是按钮1
&QPushButton::clicked: &信号发送者::发送的什么信号; 这里是点击按钮
this: 信号接受者; 这里是窗口
&MainWidget::close: 信号接收者::槽函数, 信号处理函数; 这里是窗口关闭
之后运行, 点击Close按钮, 窗口就会关闭了.

附录

main.cpp

#include "mainwidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWidget w;
    w.show();

    return a.exec();
}

mainwidget.h

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>

class MainWidget : public QWidget
{
    Q_OBJECT

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

private:
    QPushButton b1;
    QPushButton *b2;
};

#endif // MAINWIDGET_H

mainwidget.cpp

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    b1.setParent(this);
    b1.setText("Close");
    b1.move(50, 50);

    b2 = new QPushButton(this);
    b2->setText("Button2");
    b2->move(150, 50);

    connect(&b1, &QPushButton::clicked, this, &MainWidget::close);
     // connect(&b1, SIGNAL(clicked()), this, SLOT(close()));  // Qt4 (Qt5也能用)
}

MainWidget::~MainWidget()
{

}


此文原创禁止转载,转载文章请联系博主并注明来源和出处,谢谢!
作者: Raina_RLN https://www.cnblogs.com/raina/

原文地址:https://www.cnblogs.com/raina/p/11311320.html