信号和槽
1.信号和槽用于两个对象之间的通信。
2.当特殊的事情发生时便可以发射信号,而槽是一个函数,在信号发射后被调用来响应这个信号。
3.信号只用声明,不需要也不能对它进行定义实现。发射信号用emit关键字。信号没有返回值,只能是void类型的。
4.信号和槽的关联使用的是QObject类的connect()函数。
下面看一个例子:
//dialog.h #ifndef DIALOG_H #define DIALOG_H #include <QDialog> namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); signals: void giveText(QString s);//声明一个信号 private slots: void on_pushButton_clicked();//添加一个槽 private: Ui::Dialog *ui; }; #endif // DIALOG_H
//dialog.cpp #include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); } Dialog::~Dialog() { delete ui; } void Dialog::on_pushButton_clicked()//槽的实现 { QString s= ui->lineEdit->text(); //获取文本框内的字符串 emit giveText(s); //发射信号 }
//mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_action_triggered();//添加两个槽 void putText(QString s); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
//mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include<QDialog> #include<dialog.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_action_triggered() { Dialog * d = new Dialog(); //声明一个对话框 connect(d,&Dialog::giveText,this,&MainWindow::putText);//连接槽void putText()和信号void giveText(s) d->show(); } void MainWindow::putText(QString s) { ui->label->setText(s);//将标签设置为获取的字符串s }
//main.cpp #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
最后效果为:

点击“子窗口”,发射信号。

输入“123456”,点击“确认”,并点击“OK”,发射信号。

父窗口如图所示。

浙公网安备 33010602011771号