QT(1)-信号与槽-1-单值传输-基础类型-int-示例源码

     
    信号与槽是用于两个对象间的通信。QT中N-N的方式是不同于其他开发框架的最突出特征。也就是说可以实现一对一,一对多,多对多的通信。本文描述的是1对1通信模式的结构和实例。
比如:一个小对话框上输入一个数字,点击按钮后数字传到主对话框上。

 

 

   1.信号的定义与实现
   2.槽定的定义与实现
   3.信号与槽的关联(自动、手动)
   4.实例代码

 


为了描述方便 :主对话框命名为 Mainwindow 对应的文件名为Mainwindow.cpp和Mainwindow.h 
                         小对话框命名为 myDlg 对应的文件名为myDlg .cpp和myDlg .h 
                         
                         传递的数值为  myDlg 上mySpinBox 框内的数字
                         接收显示的地方为 Mainwindow上 myLabel
                         触发为 myDlg 上 pushButton按钮的clicked()


 1.信号的定义与实现
 信号的关键词 :signal   emit 
                          signals:    void dlgReturn(int);                  // 自定义对话框

                          emit dlgReturn(value);                              //发射信号


   此处小对话框中的数字为需传递的数值,所以得在myDlg定义并发射信号
   myDlg.h signals: void dlgReturn(int); //定义信号
   myDlg.cpp   emit dlgReturn(value);   //发射信号 此处value值取自于输入对话框



   2.槽定的定义与实现

   

槽的关键词:slots
          
private slots:   
        void on_pushButton_clicked()    //自动关联的槽函数
                on_控件名_事件名                 格式命名函数,它自动关联事件和控件,无需再写connect函数,也无需写实现函数。
         void showValue(int value);        //自定义传递数值的槽函数

在主对话框中显示数值, 所以在Mainwindow.cpp 
       void MainWindow::showValue(int value)         // 自定义槽函数
   {
       ui->myLabel->setText(tr("获取的值是:%1").arg(value));
   }

 



   3.信号与槽的关联(自动、手动)

 

     定义:connect( const QObject *sender,(发送的控件)
                          const char *signal, (信号函数)
                          const QObject *receiver,(接收的控件)
                          const char *method,(接收的方式)
                           Qt::ConnectionType type =Qt::AutoConnection);



   4.实例代码

   4.1 main .cpp

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}


   4.2小对话框 myDlg.h  myDlg.cpp

#ifndef MYDLG_H
#define MYDLG_H

#include <QDialog>

namespace Ui {
class myDlg;
}

class myDlg : public QDialog
{
    Q_OBJECT

public:
    explicit myDlg(QWidget *parent = nullptr);
    ~myDlg();

private:
    Ui::myDlg *ui;

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

private slots:
    void on_pushButton_clicked();
};

#endif // MYDLG_H
#include "mydlg.h"
#include "ui_mydlg.h"

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

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


  4.3主对话框 MainWindow.h MainWindow.cpp

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "mydlg.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


private:
    Ui::MainWindow *ui;

private slots:
    void showValue(int value);

};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mydlg.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    myDlg *dlg = new myDlg(this);
    connect(dlg, &myDlg::dlgReturn,this,&MainWindow::showValue);
    dlg->show();
}

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值