信号与槽机制

需要确定的问题:

1、哪个窗口的哪个控件被操作——在哪个.cpp文件中定义槽函数

2、控件的操作类型(鼠标单击、鼠标滑过、双击鼠标...)——信号

3、控件被操作之后,需要执行哪个类的哪个函数 ——槽函数

例如:点击MainWindow窗体中的登录按钮,然后使得"QQ登录"标签改变内容。

1、找到指定的控件名称

2、connect调用

在哪里调用?——这里控件是在Mainwindow对象中,那就在Mainwindow.cpp中去写

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 
 4 MainWindow::MainWindow(QWidget *parent) :
 5     QMainWindow(parent),
 6     ui(new Ui::MainWindow)
 7 {
 8     ui->setupUi(this);
 9     //哪个控件、什么操作、哪个对象接收、槽函数
10     connect(this->ui->pushButton,SIGNAL(clicked()),this,SLOT(login()));
11     /*
12      * MainWindow对象中的pushButton,在mainwindow.ui中设计的
13      * 信号:点击事件
14      * 接收的对象:这里定义的就是MainWindow本身
15      * 槽函数:login()
16      *
17      * 为什么这里的connect方法在发出信号的类构造函数中调用,因为在MainWindow对象构建出来之后,
18      * 能够建立起发生信号的类对象和接收信号的类对象的关系。
19      */
20 }
21 
22 MainWindow::~MainWindow()
23 {
24     delete ui;
25 }
26 
27 //定义槽函数
28 /*
29  * 声明槽函数,需要 private slots,凡是在其范围内声明的函数都被视为槽函数
30  */
31 void MainWindow::login(){
32     //定义操作逻辑
33 }

3、在Mainwindow.h中声明槽函数,定义函数操作逻辑

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 
 6 namespace Ui {
 7 class MainWindow;
 8 }
 9 
10 class MainWindow : public QMainWindow
11 {
12     Q_OBJECT
13 
14 public:
15     explicit MainWindow(QWidget *parent = nullptr);
16     ~MainWindow();
17 
18 //声明槽函数
19 private slots:
20     void login();
21 
22 private:
23     Ui::MainWindow *ui;  //ui指向的空间就是MainWindow对象,其中定义的控件在mainwindow.ui中设计
24 };
25 
26 #endif // MAINWINDOW_H

猜你喜欢

转载自www.cnblogs.com/data1213/p/10799282.html
今日推荐