QT信号与槽之槽函数

时间:2020-12-19 17:33:49

Qt的一项重要的机制就是它的信号,在图形用户界面编程中,经常需要将一个窗口部件的变化通知给另一个窗口部件,或者说系统对象进行通信.一般的图形用户编程中采用回调函数进行对象间通信(如gtk+),这样回调函数和处理函数捆绑在一起,但这样做没有信号和槽机制简便和灵活。

QT信号是什么,大家可以方便的搜索到。或许用QT Designer 设计会方便一些,其实手动写出来或许会更好。下面就是自己自己手动设计的一个槽函数的例子。此处写的是类似QQ的登陆框。

1.首先在头文件中定义槽函数。   

 
  1. #ifndef LOGINDIALOG_H    
  2. #define LOGINDIALOG_H    
  3. #include <QDialog>     
  4. namespace Ui {     
  5.     class LoginDialog;     
  6. }     
  7. class LoginDialog : public QDialog     
  8. {     
  9.     Q_OBJECT     
  10. public:     
  11.     explicit LoginDialog(QWidget *parent = 0);     
  12.     ~LoginDialog();     
  13. private:     
  14.     Ui::LoginDialog *ui;     
  15. private slots:     
  16.     void on_RegisterButton_clicked();     
  17.     void SignUp(); // 自定义的槽     
  18. };    
  19. #endif // LOGINDIALOG_H    
  20. #ifndef LOGINDIALOG_H  
  21. #define LOGINDIALOG_H  
  22. #include <QDialog> 
  23. namespace Ui {  
  24.     class LoginDialog;  
  25. }  
  26. class LoginDialog : public QDialog  
  27. {  
  28.     Q_OBJECT  
  29. public:  
  30.     explicit LoginDialog(QWidget *parent = 0);  
  31.     ~LoginDialog();  
  32. private:  
  33.     Ui::LoginDialog *ui;  
  34. private slots:  
  35.     void on_RegisterButton_clicked();  
  36.     void SignUp(); // 自定义的槽  
  37. };  
  38. #endif  

2. 在CPP中连接信号click与SignUp并实现槽函数体。

 
  1. //构造函数     
  2. LoginDialog::LoginDialog(QWidget *parent) :     
  3.     QDialog(parent),     
  4.     ui(new Ui::LoginDialog)     
  5. {     
  6.     ui->setupUi(this);     
  7.     ui->loginpassword->setEchoMode(QLineEdit::Password); //给密码加密     
  8.     ui->loginuserid->setFocus(); //设置焦点     
  9.     connect(ui->LoginButton,SIGNAL(clicked()),this,SLOT(SignUp()));//connect     
  10. }     
  11. void LoginDialog::SignUp()     
  12. {     
  13. ...     
  14. }    
  15. //构造函数  
  16. LoginDialog::LoginDialog(QWidget *parent) :  
  17.     QDialog(parent),  
  18.     ui(new Ui::LoginDialog)  
  19. {  
  20.     ui->setupUi(this);  
  21.     ui->loginpassword->setEchoMode(QLineEdit::Password); //给密码加密  
  22.     ui->loginuserid->setFocus(); //设置焦点  
  23.     connect(ui->LoginButton,SIGNAL(clicked()),this,SLOT(SignUp()));//connect  
  24. }  
  25. void LoginDialog::SignUp()  
  26. {  
  27. ...