实现功能,在第一个窗体A上新建二个Label,及一个按钮,点击窗体上上的按钮,打开B窗口,再在B窗口新建一个LineEdit编辑框,当B窗口编辑框中办理入文字的时候,改变窗体A上Label的文字,第一个Labele通过信号与槽实现,第二个通过接口实现。
代码如下:定义接口类
#ifndef IEDITARG_H
#define IEDITARG_H
#include <QString>
namespace Ui {
class IEditArg;
}
class IEditArg
{
public:
IEditArg();
~IEditArg();
virtual void ChangeLabelText(QString str);
};
#endif // IEDITARG_H
#include "ieditarg.h"
IEditArg::IEditArg()
{
}
IEditArg::~IEditArg()
{
}
void IEditArg::ChangeLabelText(QString str)
{
}
窗体
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtWidgets>
#include <QMainWindow>
#include <ieditarg.h>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow,public IEditArg
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void ChangeLabelText(QString str)override;
private:
Ui::MainWindow *ui;
QLabel *labText;
QLabel *labText2;
void showSubWindow();
private slots:
void setLabel(QString str);
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtWidgets>
#include "dlgedit.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QPushButton *btnShow = new QPushButton(this);
btnShow->setText("Show Window");
btnShow->move(100,100);
btnShow->setFixedSize(160,40);
connect(btnShow,&QPushButton::clicked,this,&MainWindow::showSubWindow);
labText = new QLabel(this);
labText->setText("显示窗体二上办理入的内容");
labText->move(100,170);
labText->setFixedWidth(160);
labText2 = new QLabel(this);
labText2->setText("显示窗体二上办理入的内容");
labText2->move(100,210);
labText->setFixedWidth(160);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::ChangeLabelText(QString str)
{
labText2->setText(str);
}
void MainWindow::showSubWindow()
{
DlgEdit *dlgEdit = new DlgEdit(this);
dlgEdit->setArgInterface(this);//将A窗体的接口传给B窗口
dlgEdit->show();
connect(dlgEdit,SIGNAL(Changelabel(QString)),this,SLOT(setLabel(QString)));
}
void MainWindow::setLabel(QString str)
{
labText->setText(str);
}
B窗体
#ifndef DLGEDIT_H
#define DLGEDIT_H
#include <QDialog>
#include <QtWidgets>
#include <ieditarg.h>
namespace Ui {
class DlgEdit;
}
class DlgEdit : public QDialog
{
Q_OBJECT
public:
explicit DlgEdit(QWidget *parent = nullptr);
~DlgEdit();
void setArgInterface(IEditArg *aEditArg);
signals:
void Changelabel(QString);
private:
Ui::DlgEdit *ui;
QLineEdit * lineEdit;
IEditArg *iEditarg = nullptr;
void changeText();
};
#endif // DLGEDIT_H
#include "dlgedit.h"
#include "ui_DlgEdit.h"
#include <QtWidgets>
DlgEdit::DlgEdit(QWidget *parent) :
QDialog(parent),
ui(new Ui::DlgEdit)
{
ui->setupUi(this);
lineEdit = new QLineEdit(this);
lineEdit->setPlaceholderText("Please input ");
lineEdit->move(100,20);
connect(lineEdit,&QLineEdit::textChanged,this,&DlgEdit::changeText);
}
DlgEdit::~DlgEdit()
{
delete ui;
}
void DlgEdit::setArgInterface(IEditArg *aEditArg)
{
iEditarg=aEditArg;
}
void DlgEdit::changeText()
{
QString strTemp;
strTemp = this->lineEdit->text();
setWindowIconText(strTemp);
emit Changelabel(strTemp);//通过信号与槽实现
if (iEditarg!=nullptr)//以下通过接口实现
iEditarg->ChangeLabelText(strTemp);
}
运行后效果如下图