当前位置:   article > 正文

qt之使用自定义的信号与槽_ui->lineedit->text()改变后发出信号

ui->lineedit->text()改变后发出信号

前面简单讲述了qt的信号与槽机制和如何建立信号与槽的两种方法,但是前面所使用的信号是qt本身已经编写好的,今天我们来学习如何使用自己编写的信号函数(信号与槽本身就是函数,前面已经讲过)并且发送字符串信息。

首先,是这次用到的代码:

  1. #ifndef CHILDDIALOG_H
  2. #define CHILDDIALOG_H
  3. #include <QDialog>
  4. namespace Ui {
  5. class ChildDialog;
  6. }
  7. class ChildDialog : public QDialog
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit ChildDialog(QWidget *parent = 0);
  12. ~ChildDialog();
  13. private:
  14. Ui::ChildDialog *ui;
  15. public slots:
  16. void getTextFromFather(QString);
  17. };
  18. #endif // CHILDDIALOG_H

  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QDialog>
  4. namespace Ui {
  5. class Dialog;
  6. }
  7. class ChildDialog;
  8. class Dialog : public QDialog
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit Dialog(QWidget *parent = 0);
  13. ~Dialog();
  14. private:
  15. Ui::Dialog *ui;
  16. ChildDialog * child;
  17. signals:
  18. void giveText(QString);
  19. private slots:
  20. void workOnValues();
  21. };
  22. #endif // DIALOG_H
  1. #include "childdialog.h"
  2. #include "ui_childdialog.h"
  3. ChildDialog::ChildDialog(QWidget *parent) :
  4. QDialog(parent),
  5. ui(new Ui::ChildDialog)
  6. {
  7. ui->setupUi(this);
  8. }
  9. ChildDialog::~ChildDialog()
  10. {
  11. delete ui;
  12. }
  13. void ChildDialog::getTextFromFather(QString text)
  14. {
  15. ui->lineEdit->setText(text);
  16. }

  1. #include "dialog.h"
  2. #include "childdialog.h"
  3. #include "ui_dialog.h"
  4. Dialog::Dialog(QWidget *parent) :
  5. QDialog(parent),
  6. ui(new Ui::Dialog)
  7. {
  8. ui->setupUi(this);
  9. child = new ChildDialog(this);
  10. connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(workOnValues()));
  11. connect(this,SIGNAL(giveText(QString)),child,SLOT(getTextFromFather(QString)));
  12. //connect(ui->lineEdit,SIGNAL(textChanged(QString)),child,SLOT(getTextFromFather(QString)));
  13. child->show();
  14. }
  15. Dialog::~Dialog()
  16. {
  17. delete ui;
  18. }
  19. void Dialog::workOnValues()
  20. {
  21. QString s = ui->lineEdit->text();
  22. s=s.toUpper();
  23. emit giveText(s);
  24. }

  1. #include "dialog.h"
  2. #include <QApplication>
  3. int main(int argc, char *argv[])
  4. {
  5. QApplication a(argc, argv);
  6. Dialog w;
  7. w.show();
  8. return a.exec();
  9. }

前面两段代码是头文件,接下来的是具体的实现,最后一段是主函数。这里我们只关注这几行代码

signals:
    void giveText(QString);

private slots:
    void workOnValues();
public slots:
    void getTextFromFather(QString);

上面那个就是定义了信号函数,下面那个定义的是槽(看那个signals和slots)。然后是这行代码

emit giveText(s);

这个就是在发送信号。再来看一下connect函数

 connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(workOnValues()));
    connect(this,SIGNAL(giveText(QString)),child,SLOT(getTextFromFather(QString)));
第一个函数的意义是:

由ui->lineEdit这个对象发出textChange的信号,然后this指的这个对象做出反应执行workValues函数,第二个同理。

可能有人会问为什么没有 emit textChange来发送信号,这是因为这个信号函数是qt本身写好的就像之前的那个clicked信号不需要发送。同时,在发送信号的时候传递了字符串信息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/225511
推荐阅读
相关标签
  

闽ICP备14008679号