无法访问 Qt5 中对话框的成员
Posted
技术标签:
【中文标题】无法访问 Qt5 中对话框的成员【英文标题】:Cannot access members of a dialog box in 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/
【问题讨论】:
【参考方案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()。
我希望这很清楚,如果你不明白任何部分,请告诉我。
【讨论】:
以上是关于无法访问 Qt5 中对话框的成员的主要内容,如果未能解决你的问题,请参考以下文章