新建工程,Qt Widgets Application,类名为Widget。
在这个基础上新建Qt设计师界面类,类名Dialog。
widget.ui和dialog.ui里分别拉入一个QPushbutton,widget.ui里再拉入一个QLineEdit,QLineEdit里随便填个数字。
想要获取槽函数的返回值,可以通过给信号加上参数的方式,参数是一个引用。
Dialog里点击按钮发送信号,并打出参数的值。参数的值根据widget.ui里QLineEdit的值变化。这个参数即相当于槽函数的返回值。
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDebug>
#include "dialog.h"
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButton_clicked();
void on_signal_from_dialog(int &n);
private:
Ui::Widget *ui;
Dialog *d;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
d = new Dialog();
this->connect(this->d, SIGNAL(widget_signals(int &)), this, SLOT(on_signal_from_dialog(int &)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
d->show();
}
void Widget::on_signal_from_dialog(int &n)
{
n = ui->lineEdit->text().toInt();
qDebug() << "hello";
}
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QDebug>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = nullptr);
~Dialog();
signals:
void widget_signals(int &n);
private:
Ui::Dialog *ui;
private slots:
void on_pushButton_clicked();
};
#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()
{
int a;
emit widget_signals(a);
qDebug() << "a = " << a;
}