2017-10-31 16 views
2

にダイアログボックスのメンバーにアクセスできません。メインウィンドウの「追加」ボタンをクリックすると、メインウィンドウが機能し、ダイアログボックスが表示されます。は、私がここにQT5 Visual Studioのチュートリアルと一緒に従うことをしようとしていますQT5

このダイアログボックスには、値を取得するQLineEditオブジェクトが2つあります。しかし、私はダイアログのこれらのメンバーにアクセスできないようです。私が手 Dialog Window Objects

エラー:ダイアログウィンドウ内

2つのオブジェクトが "nameEdit"(ハイライト)と(その下) "emailEdit" です
- "クラスのAddDialog ''は何のメンバーを持っていません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」というクラスメンバーが1つしかないことがわかります。

"nameEdit"と "emailEdit"もそこに存在すると予想されましたが、そうではありません。彼らはどこですか? Ui :: AddDialogクラスにあります。

したがって、生成されたui_AddDialog.hを見ると、 "nameEdit"および "emailEdit"メンバーがそのクラスに含まれていることがわかります。

AddDialogクラスからこれらの2つのメンバーにアクセスするには、付属のUi :: AddDialogクラスからそれらを参照するAddDialogでアクセサー関数を使用できるようにする必要があります。例えば

:あなたのアドレス帳クラスでAddDialogを使用する場合

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

それでは、あなたは、単に(dialog.nameを呼び出すことができます)。

私はこれが明確であることを希望します。あなたが何かを理解していない場合は教えてください。

関連する問題