기본적으로 두 번째 윈도우의 레이블을 통과해야 첫 번째 창에서 lineEdit의 데이터를 의미합니다
void setLabelTextAndShow(QString);
및 FirstForm
에서 호출 : 즉,이 같은 SecondForm
방법을 제공, 두 가지 형태 중 하나가 다른 인식 할 수 있습니다. 이는 몇 가지 중요한 사항을 의미합니다. FirstForm
은 공개 인터페이스 SecondForm
을 알아야하며 이에 액세스 할 수있는 이어야합니다 (즉 적어도 SecondForm
인스턴스에 포인터가 있어야합니다).
Qt 신호/슬롯 내장 메커니즘을 사용하여 양식을 서로에 대해 불가지론으로 유지합니다.
signals:
void pushBttonClicked(QString lineEditText);
'방출'될 :
private slots:
void setLabelTextAndShow(QString);
FirstForm에 당신이
signal
선언하면서 :
그래서, SecondForm에, 대신 위의 같은 공공 방법을, 당신은 slot
가지고 푸시 버튼 클릭시 :
void FirstForm::on_pushButton_clicked()
{
emit pushBttonClicked(ui->lineEdit->text());
this->close();
}
SecondForm 슬롯 :
void SecondForm::setLabelTextAndShow(QString text)
{
ui->label->setText(text);
this->show();
}
신호와 슬롯을 사용하기 전에 연결해야합니다. 이 주에서 발생하자이 두 번째 방법으로
#include "firstform.h"
#include "secondform.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
FirstForm f1;
SecondForm f2;
QObject::connect(&f1, SIGNAL(pushBttonClicked(QString)), &f2, SLOT(setLabelTextAndShow(QString)));
f1.show();
return app.exec();
}
, 당신은 재사용의 측면에서 꽤 좋은 클래스 사이에 의존를 생성 피했다.
그래서 이것을 해결하기 위해 무엇을 시도 했습니까? 그리고 당신의 시도는 효과가 없습니다. –
SLOT 및 신호로 시도했지만 작동했지만 두 프로그램 창을 모두 표시 할 때 첫 번째 창에서 단추를 누른 후 두 번째 창을 열고 레이블의 lineEdit 값을 표시해야합니다. – Dave