2017-12-16 1 views
-3

이 프로젝트에는 두 개의 Windows가 있습니다. 첫 번째 이름은 firstform으로 지정하고 다른 이름은 seconform으로 지정합니다.첫 번째 창에서 두 번째 창 누름 버튼으로 값 전달 및

첫 번째 폼에서 사용자는 QlineEdit에 입력 한 다음 버튼을 클릭 할 수 있습니다. firstform close 및 secondform이 열리 며 레이블의 두 번째 창에는 입력 된 것이 표시되어야합니다.

당신 :

는 서로 다른 클래스의 인스턴스 사이에이 정보를 전달하는 방법 (또는 조치)가,

+3

그래서 이것을 해결하기 위해 무엇을 시도 했습니까? 그리고 당신의 시도는 효과가 없습니다. –

+0

SLOT 및 신호로 시도했지만 작동했지만 두 프로그램 창을 모두 표시 할 때 첫 번째 창에서 단추를 누른 후 두 번째 창을 열고 레이블의 lineEdit 값을 표시해야합니다. – Dave

답변

0

기본적으로 두 번째 윈도우의 레이블을 통과해야 첫 번째 창에서 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(); 
} 

, 당신은 재사용의 측면에서 꽤 좋은 클래스 사이에 의존를 생성 피했다.

+0

감사합니다. 당신은 너무 많은 선생님 그것은 작동하고있다 – Dave

+0

나는이 프로젝트에 2 개의 윈도우가있다 다른 질문이있다, . 첫 번째 이름은 firstform으로 지정하고 다른 이름은 seconform으로 지정합니다. 정수는 firstform에서 x라는 변수를 선언했습니다.h int x; 및 firstform.cpp 해당 변수에 값을 할당했습니다. x = 10; 사용자가 프로그램을 실행 한 후 첫 번째 폼에서 버튼을 클릭하십시오. 두 번째 폼이 열리고 레이블의 secondform 창에 변수 값이 표시되어야합니다. (10) 첫 번째 창에있는 lineEdit의 데이터가 두 번째 창 레이블로 전달되어야 함을 의미합니다. – Dave

+0

나는이 문제에 대해 적절한 질문을해야한다고 생각합니다. 내가 당신을 도우려는 것은 아니지만, 질문에 답글을 올릴 가능성이 더 높습니다. 또한, 나는 같은 이유로 귀하의 질문과 함께 몇 가지 코드를 게시 할 것을 강력하게 제안합니다. 그것은 대답 될 확률이 더 높습니다. 좋은 하루 되세요. –

관련 문제