.pro

#-------------------------------------------------
#
# Project created by QtCreator 2016-06-02T22:32:28
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = mysignalslot
TEMPLATE = app


SOURCES += main.cpp\
        widget.cpp \
    mydialog.cpp

HEADERS  += widget.h \
    mydialog.h

FORMS    += widget.ui \
    mydialog.ui

main.cpp

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

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

    return a.exec();
}

widget.ui

在这里插入图片描述

widget.cpp

信号与槽QT4、QT5、Lambda写法:

#include "widget.h"
#include "ui_widget.h"
#include "mydialog.h"
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    MyDialog *dlg = new MyDialog(this);
    // 将对话框中的自定义信号与主界面中的自定义槽进行关联
//  connect(dlg, SIGNAL(dlgReturn(int)), this, SLOT(showValue(int)));
    connect(dlg, &MyDialog::dlgReturn, this, &Widget::showValue);
//    connect(dlg, &MyDialog::dlgReturn, [=](int value){
//        ui->label->setText(tr("获取的值是:%1").arg(value));
//    });

    dlg->show();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::showValue(int value)         // 自定义槽
{
    ui->label->setText(tr("获取的值是:%1").arg(value));
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;

private slots:
    void showValue(int value);

};

#endif // WIDGET_H

mydialog.ui

在这里插入图片描述

mydialog.cpp

#include "mydialog.h"
#include "ui_mydialog.h"
#include <QDebug>

MyDialog::MyDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MyDialog)
{
    ui->setupUi(this);
}

MyDialog::~MyDialog()
{
    delete ui;
}

void MyDialog::on_pushButton_clicked()
{
    int value = ui->spinBox->value();    // 获取输入的数值
    emit dlgReturn(value);               // 发射信号
    //close();                             // 关闭对话框
}

mydialog.h

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include <QDialog>

namespace Ui {
class MyDialog;
}

class MyDialog : public QDialog
{
    Q_OBJECT

public:
    explicit MyDialog(QWidget *parent = 0);
    ~MyDialog();

private:
    Ui::MyDialog *ui;


signals:
    void dlgReturn(int);                  // 自定义的信号

private slots:
    void on_pushButton_clicked();
};

#endif // MYDIALOG_H

效果展示

在这里插入图片描述

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐