赞
踩
前面简单讲述了qt的信号与槽机制和如何建立信号与槽的两种方法,但是前面所使用的信号是qt本身已经编写好的,今天我们来学习如何使用自己编写的信号函数(信号与槽本身就是函数,前面已经讲过)并且发送字符串信息。
首先,是这次用到的代码:
- #ifndef CHILDDIALOG_H
- #define CHILDDIALOG_H
-
- #include <QDialog>
-
- namespace Ui {
- class ChildDialog;
- }
-
- class ChildDialog : public QDialog
- {
- Q_OBJECT
-
- public:
- explicit ChildDialog(QWidget *parent = 0);
- ~ChildDialog();
-
- private:
- Ui::ChildDialog *ui;
-
- public slots:
- void getTextFromFather(QString);
-
- };
-
- #endif // CHILDDIALOG_H
- #ifndef DIALOG_H
- #define DIALOG_H
-
- #include <QDialog>
-
- namespace Ui {
- class Dialog;
- }
- class ChildDialog;
-
- class Dialog : public QDialog
- {
- Q_OBJECT
-
- public:
- explicit Dialog(QWidget *parent = 0);
- ~Dialog();
-
- private:
- Ui::Dialog *ui;
- ChildDialog * child;
-
- signals:
- void giveText(QString);
-
- private slots:
- void workOnValues();
-
- };
-
- #endif // DIALOG_H
- #include "childdialog.h"
- #include "ui_childdialog.h"
-
- ChildDialog::ChildDialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::ChildDialog)
- {
- ui->setupUi(this);
- }
-
- ChildDialog::~ChildDialog()
- {
- delete ui;
- }
-
- void ChildDialog::getTextFromFather(QString text)
- {
- ui->lineEdit->setText(text);
- }
- #include "dialog.h"
- #include "childdialog.h"
- #include "ui_dialog.h"
-
- Dialog::Dialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::Dialog)
- {
- ui->setupUi(this);
- child = new ChildDialog(this);
- connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(workOnValues()));
- connect(this,SIGNAL(giveText(QString)),child,SLOT(getTextFromFather(QString)));
- //connect(ui->lineEdit,SIGNAL(textChanged(QString)),child,SLOT(getTextFromFather(QString)));
-
- child->show();
- }
-
- Dialog::~Dialog()
- {
- delete ui;
- }
-
- void Dialog::workOnValues()
- {
- QString s = ui->lineEdit->text();
- s=s.toUpper();
- emit giveText(s);
- }
- #include "dialog.h"
- #include <QApplication>
-
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- Dialog w;
- w.show();
-
- return a.exec();
- }
前面两段代码是头文件,接下来的是具体的实现,最后一段是主函数。这里我们只关注这几行代码
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信号不需要发送。同时,在发送信号的时候传递了字符串信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。