1.使用QT中的Signal&Slot机制进行传值
我在mainwindow里面添加了一个textedit用来接收传递过来的值,dialog里面添加了一个ok按钮和一个lineedit,可以在lineedit里面输入信息点击ok按钮时传递到主窗口。
dialog.h如下:
- <span style="font-family:Microsoft YaHei;font-size:12px;">#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();
-
- private slots:
- void on_pushButton_clicked();
-
- signals:
- void sendData(QString); //用来传递数据的信号
-
- private:
- Ui::Dialog *ui;
- };
-
- #endif // DIALOG_H</span>
dialog.cpp如下:
- <span style="font-family:Microsoft YaHei;font-size:12px;">#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()
- {
- emit sendData(ui->lineEdit->text()); //获取lineEdit的输入并且传递出去
- }
- </span>
mainwindow.h如下:
- <span style="font-family:Microsoft YaHei;font-size:12px;">#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 receiveData(QString data); //接收传递过来的数据的槽
-
- private:
- Ui::MainWindow *ui;
- };
-
- #endif // MAINWINDOW_H
- </span>
mainwindow.cpp如下:
- <span style="font-family:Microsoft YaHei;font-size:12px;">#include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include "dialog.h"
-
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
-
- Dialog *dlg = new Dialog;
- //关联信号和槽函数
- connect(dlg, SIGNAL(sendData(QString)), this, SLOT(receiveData(QString)));
- dlg->show();
- }
-
- MainWindow::~MainWindow()
- {
- delete ui;
- }
-
- void MainWindow::receiveData(QString data)
- {
- ui->textEdit->setText(data); //获取传递过来的数据
- }
- </span>
main.cpp如下:
- <span style="font-family:Microsoft YaHei;font-size:12px;">#include "mainwindow.h"
- #include <QApplication>
-
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MainWindow w;
- w.show();
-
- return a.exec();
- }
- </span>
最终的结果:
因为信号和槽可以是多对多的,所以,在类似多个窗体广播信息时,这种方式就很有用。
2.使用public形式的函数接口进行传值