gpt4 book ai didi

c++ - 无法访问Qt5中对话框的成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:44 25 4
gpt4 key购买 nike

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

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

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

对话窗口中的两个对象是“nameEdit”(突出显示)和“emailEdit”(在其下方): Dialog Window Objects

我得到的错误:
-“类‘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/

最佳答案

The errors I get:

-"class 'AddDialog' has no member 'nameEdit'

-"class 'AddDialog' has no member '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()。

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

关于c++ - 无法访问Qt5中对话框的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47026357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com