我正在尝试按照Qt5 Visual Studio教程进行操作: http://doc.qt.io/qtvstools/qtvstools-getting-started.html
本教程创建一个主窗口和一个弹出对话框。主窗口正在工作,当您单击"添加"时,将显示对话框。主窗口上的按钮。
在对话框中,我想从中获取两个QLineEdit对象。但我似乎无法访问对话框的这些成员。
对话窗口中的两个对象是" nameEdit" (突出显示)和" emailEdit" (在它下面):
我得到的错误:
- " class' AddDialog'没有会员&name; nameEdit'。
- " class' AddDialog'没有会员' emailEdit'
您能看到我无法访问AddDialog类成员的原因是什么?
这是AddressBook.cpp文件(我的主窗口)。
Heroku
AddDialog.h(对话框):
#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.cpp(对话框):
#include <QDialog>
#include "ui_AddDialog.h"
class AddDialog : public QDialog
{
Q_OBJECT
public:
AddDialog(QWidget *parent = Q_NULLPTR);
~AddDialog();
private:
Ui::AddDialog ui;
};
我试图将我认为相关代码的内容复制到问题中,但为了以防万一,如果需要,以下是其他所有内容: https://github.com/davek99/DK-QT_Address_Book/
答案 0 :(得分:1)
我得到的错误:
- &#34; class&#39; AddDialog&#39;没有会员名称编辑&#39;
- &#34; class&#39; AddDialog&#39;没有会员&#39; emailEdit&#39;
所以编译器告诉你没有成员&#34; nameEdit&#34;或&#34; emailEdit&#34;在你的AddDialog类中。
因此,如果您查看AddDialog类头文件,您可以看到只声明了一个类成员,&#34; Ui :: AddDialog ui&#34;。
所以你期待&#34; nameEdit&#34;和&#34; emailEdit&#34;在那里,但他们不是。那他们在哪儿?好吧,它们在Ui :: AddDialog类中。
所以,如果你看看生成的ui_AddDialog.h,你会看到&#34; nameEdit&#34;和&#34; emailEdit&#34;成员都在那个班级。
因此,为了从AddDialog类中访问这两个成员,您需要在AddDialog中提供可从包含的Ui :: AddDialog类引用它们的访问器函数。
例如:
QString AddDialog::name() {
return ui.nameEdit->text();
}
那么当您在AddressBook类中使用AddDialog时,您只需调用dialog.name()。
我希望这很清楚,如果你不理解任何部分,请告诉我。