2017-10-31 16 views
2

에서 대화 상자의 멤버에 액세스 할 수 없습니다. 기본 창이 작동하고 기본 창에서 "추가"버튼을 클릭 할 때 대화 상자가 나타납니다.내가 여기 QT5 비주얼 스튜디오 튜토리얼을 따라하려고 QT5

대화 상자에는 값을 가져 오려는 QLineEdit 개체가 두 개 있습니다. 하지만 대화 상자의 이러한 멤버에 액세스 할 수 없습니다. "클래스 'AddDialog은'어떤 멤버가 없다 '-
가 : Dialog Window Objects

내가 얻는 오류 :

대화 창에서 두 객체

는"nameEdit "(강조)와 (아래)"emailEdit "입니다 nameEdit '
-. "클래스'AddDialog은 '어떤 회원이 없습니다'emailEdit '

당신은 내가 내 AddDialog 클래스의 멤버에 액세스 할 수없는 이유가 무엇인지 볼 수 있을까요?

다음은 AddressBook.cpp 파일 (내 주 창)입니다.

#include "AddressBook.h" 
#include "AddDialog.h" 
#include "ui_AddDialog.h" 

AddressBook::AddressBook(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    ui.setupUi(this); 
} 

void AddressBook::on_addButton_clicked() 
{ 
    AddDialog dialog(this); 

    if (dialog.exec()) 
    { 
     QString name = dialog.nameEdit->text(); 
     QString email = dialog.emailEdit->text(); 

     if (!name.isEmpty() && !email.isEmpty()) 
     { 
      QListWidgetItem *item = new QListWidgetItem(name, ui.addressList); 
      item->setData(Qt::UserRole, email); 
      ui.addressList->setCurrentItem(item); 
     } 
    } 
} 

void AddressBook::on_addressList_currentItemChanged() 
{ 
    QListWidgetItem *curItem = ui.addressList->currentItem(); 

    if (curItem) { 
     ui.nameLabel->setText("Name: " + curItem->text()); 
     ui.emailLabel->setText("Email: " + curItem->data(Qt::UserRole).toString()); 
    } 
    else { 
     ui.nameLabel->setText("<No item selected>"); 
     ui.emailLabel->clear(); 
    } 

} 

AddDialog.h (대화 상자) :

#include <QDialog> 
    #include "ui_AddDialog.h" 

    class AddDialog : public QDialog 
    { 
     Q_OBJECT 

    public: 
     AddDialog(QWidget *parent = Q_NULLPTR); 
     ~AddDialog(); 

    private: 
     Ui::AddDialog ui; 
    }; 

그리고 AddDialog.cpp (대화 상자) :

#include "AddDialog.h" 
AddDialog::AddDialog(QWidget *parent) 
    : QDialog(parent) 
{ 
    ui.setupUi(this); 
} 

나는하려 단지 문제에 대한 관련 코드라고 생각되는 내용을 복사하십시오. 다만, 가 필요하다 : https://github.com/davek99/DK-QT_Address_Book/

답변

1

오류를 내가 얻을 :

- "클래스 'AddDialog는'어떤 회원이 없습니다 'nameEdit'

-"클래스 'AddDialog는'더 멤버 'emailEdit'

이 없습니다

그래서 컴파일러는 AddDialog 클래스에 "nameEdit"또는 "emailEdit"멤버가 없다고 알려줍니다.

AddDialog 클래스 헤더 파일을 보면 "Ui :: AddDialog ui"라는 클래스 멤버가 하나만 있다는 것을 알 수 있습니다.

"nameEdit"및 "emailEdit"도 거기에있을 것으로 예상했으나 그렇지 않았습니다. 그럼 그들은 어디 있습니까? Ui :: AddDialog 클래스에 있습니다.

그래서 생성 된 ui_AddDialog.h를 살펴보면 "nameEdit"및 "emailEdit"멤버가 해당 클래스에 있음을 알 수 있습니다.

AddDialog 클래스에서이 두 멤버에 액세스하려면 포함 된 Ui :: AddDialog 클래스에서 참조하는 AddDialog에서 접근 자 함수를 사용할 수 있어야합니다.예를 들어

: 당신이 당신의 주소록 클래스에서 AddDialog를 사용할 때

QString AddDialog::name() { 
    return ui.nameEdit->text(); 
} 

그럼, 당신은 단순히 dialog.name를 호출 할 수 있습니다().

이 부분이 무엇인지 잘 모르는 경우 알려 주시기 바랍니다.