【问题标题】:Cannot access members of a dialog box in Qt5无法访问 Qt5 中对话框的成员
【发布时间】:2017-10-31 00:54:19
【问题描述】:

我正在尝试按照此处的 Qt5 Visual Studio 教程进行操作: http://doc.qt.io/qtvstools/qtvstools-getting-started.html

本教程制作了一个主窗口和一个弹出对话框。主窗口正在工作,当您单击主窗口上的“添加”按钮时,对话框将按原样显示。

在对话框中,有两个我想从中获取值的 QLineEdit 对象。但我似乎无法访问对话框的这些成员。

对话框窗口中的两个对象是“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/

【问题讨论】:

    标签: c++ visual-studio qt dialog qt5


    【解决方案1】:

    我得到的错误:

    -“类'AddDialog'没有成员'nameEdit'

    -“类'AddDialog'没有成员'emailEdit'

    所以编译器告诉你 AddDialog 类中没有成员“nameEdit”或“emailEdit”。

    所以,如果你看一下 AddDialog 类头文件,你会发现只有一个声明的类成员,“Ui::AddDialog ui”。

    因此,您希望“nameEdit”和“emailEdit”也存在,但事实并非如此。那么他们在哪里呢?嗯,它们在 Ui::AddDialog 类中。

    因此,如果您查看生成的 ui_AddDialog.h,您将看到“nameEdit”和“emailEdit”成员在该类中。

    因此,为了从您的 AddDialog 类访问这两个成员,您需要在 AddDialog 中使访问器函数可用,以从包含的 Ui::AddDialog 类引用它们。

    例如:

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

    因此,当您在 AddressBook 类中使用 AddDialog 时,您可以简单地调用 dialog.name()。

    我希望这很清楚,如果你不明白任何部分,请告诉我。

    【讨论】:

      猜你喜欢
      • 2013-01-30
      • 2016-05-12
      • 2018-06-04
      • 2013-04-19
      • 1970-01-01
      • 2015-08-06
      • 2016-10-07
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多