Qt的一项重要的机制就是它的信号和槽,在图形用户界面编程中,经常需要将一个窗口部件的变化通知给另一个窗口部件,或者说系统对象进行通信.一般的图形用户编程中采用回调函数进行对象间通信(如gtk+),这样回调函数和处理函数捆绑在一起,但这样做没有信号和槽机制简便和灵活。
QT的信号与槽是什么,大家可以方便的搜索到。或许用QT Designer 设计槽会方便一些,其实手动写出来或许会更好。下面就是自己自己手动设计的一个槽函数的例子。此处写的是类似QQ的登陆框。
1.首先在头文件中定义槽函数。
- #ifndef LOGINDIALOG_H
- #define LOGINDIALOG_H
- #include <QDialog>
- namespace Ui {
- class LoginDialog;
- }
- class LoginDialog : public QDialog
- {
- Q_OBJECT
- public:
- explicit LoginDialog(QWidget *parent = 0);
- ~LoginDialog();
- private:
- Ui::LoginDialog *ui;
- private slots:
- void on_RegisterButton_clicked();
- void SignUp(); // 自定义的槽
- };
- #endif // LOGINDIALOG_H
- #ifndef LOGINDIALOG_H
- #define LOGINDIALOG_H
- #include <QDialog>
- namespace Ui {
- class LoginDialog;
- }
- class LoginDialog : public QDialog
- {
- Q_OBJECT
- public:
- explicit LoginDialog(QWidget *parent = 0);
- ~LoginDialog();
- private:
- Ui::LoginDialog *ui;
- private slots:
- void on_RegisterButton_clicked();
- void SignUp(); // 自定义的槽
- };
- #endif
2. 在CPP中连接信号click与SignUp并实现槽函数体。
- //构造函数
- LoginDialog::LoginDialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::LoginDialog)
- {
- ui->setupUi(this);
- ui->loginpassword->setEchoMode(QLineEdit::Password); //给密码加密
- ui->loginuserid->setFocus(); //设置焦点
- connect(ui->LoginButton,SIGNAL(clicked()),this,SLOT(SignUp()));//connect
- }
- void LoginDialog::SignUp()
- {
- ...
- }
- //构造函数
- LoginDialog::LoginDialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::LoginDialog)
- {
- ui->setupUi(this);
- ui->loginpassword->setEchoMode(QLineEdit::Password); //给密码加密
- ui->loginuserid->setFocus(); //设置焦点
- connect(ui->LoginButton,SIGNAL(clicked()),this,SLOT(SignUp()));//connect
- }
- void LoginDialog::SignUp()
- {
- ...
- }