Qt地址簿 Part 5 教程 问题~谁做过的请教一下~

chensodon 2010-05-01 04:44:14
我按教程里做了但有很多错误:

提示是 error: forward declaration of 'struct Ui::FindDialog'
error: invalid use of incomplete type 'struct Ui::FindDialog
........
错误提示在 finddialog.h中 namespace Ui {
class FindDialog;
}

FindDialog::FindDialog(QWidget *parent) :
QDialog(parent),
m_ui(new Ui::FindDialog)
private:
Ui::FindDialog *m_ui;
在 addressbook.h 中也有 namespace Ui {
class AddressBook;
}
private:
Ui::AddressBook *ui;
这个很疑惑,baidu后资料不多。。

希望各位大虾热心帮助~~万分感激



...全文
145 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishaman 2010-05-01
  • 打赏
  • 举报
回复
这似乎是你用了qtdesigner实现了布局,然后你又用代码手动布局,形成重定义。
chensodon 2010-05-01
  • 打赏
  • 举报
回复
源代码:

1.addressbook.h
#ifndef ADDRESSBOOK_H
#define ADDRESSBOOK_H

#include <QMainWindow>
#include <QWidget>
#include <QMap>
#include <QMessageBox>
#include "finddialog.h"

namespace Ui {
class AddressBook;
}



class AddressBook : public QMainWindow {
Q_OBJECT
public:
AddressBook(QWidget *parent = 0);
~AddressBook();
enum Mode{NavigationMode,AddingMode,EditingMode};

public slots:
void addContact();
void submitContact();
void cancel();
void precious();
void next();
void editContact();
void removeContact();
void findContact();

protected:
void changeEvent(QEvent *e);

private:
Ui::AddressBook *ui;

void updateInterface(Mode mode);
Mode currentMode;

QMap<QString,QString> contacts;
QString oldName;
QString oldAddress;
};

#endif // ADDRESSBOOK_H

2.addressbook.cpp
#include "addressbook.h"
#include "ui_addressbook.h"

AddressBook::AddressBook(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::AddressBook)
{
ui->setupUi(this);

ui->nameLine->setReadOnly(true);
ui->addressText->setReadOnly(true);
ui->submitButton->hide();
ui->cancelButton->hide();

connect(ui->addButton,SIGNAL(clicked()),this,SLOT(addContact()));
connect(ui->submitButton,SIGNAL(clicked()),this,SLOT(submitContact()));
connect(ui->cancelButton,SIGNAL(clicked()),this,SLOT(cancel()));
connect(ui->preciousButton,SIGNAL(clicked()),this,SLOT(precious()));
connect(ui->nextButton,SIGNAL(clicked()),this,SLOT(next()));
connect(ui->editButton,SIGNAL(clicked()),this,SLOT(editContact()));
connect(ui->removeButton,SIGNAL(clicked()),this,SLOT(removeContact()));
connect(ui->findButton,SIGNAL(clicked()),this,SLOT(findContact()));


setWindowTitle(tr("简单地址簿"));
ui->preciousButton->setEnabled(false);
ui->nextButton->setEnabled(false);
ui->editButton->setEnabled(false);
ui->removeButton->setEnabled(false);
ui->findButton->setEnabled(false);

}
AddressBook::~AddressBook()
{
delete ui;
}


void AddressBook::addContact()
{
oldName = ui->nameLine->text();
oldAddress = ui->addressText->toPlainText();
ui->nameLine->clear();
ui->addressText->clear();

updateInterface(AddingMode);


}
void AddressBook::submitContact()
{
......

}

void AddressBook::precious()
{
......
}

void AddressBook::next()
{
.............
}

void AddressBook::updateInterface(Mode mode)
{
........
}


void AddressBook::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}

3.finddialog.h
#ifndef FINDDIALOG_H
#define FINDDIALOG_H

#include <QDialog>
#include <QMessageBox>


namespace Ui {
class FindDialog;
}

class FindDialog : public QDialog {
Q_OBJECT
public:
FindDialog(QWidget *parent = 0);
~FindDialog();
QString findText();

public slots:
void findClicked();

protected:
void changeEvent(QEvent *e);

private:
Ui::FindDialog *m_ui;
};

#endif // FINDDIALOG_H

4.finddialog.cpp
#include "finddialog.h"
#include "ui_finddialog.h"

FindDialog::FindDialog(QWidget *parent) :
QDialog(parent),
m_ui(new Ui::FindDialog)
{
m_ui->setupUi(this);

connect(m_ui->findButton,SIGNAL(clicked()),this,SLOT(findClicked()));

setWindowTitle(tr("Find a Contact"));
}

FindDialog::~FindDialog()
{
delete m_ui;
}

void FindDialog::findClicked()
{
QString text = m_ui->lineEdit->text();

if (text.isEmpty())
{
QMessageBox::information(this,tr("Empty Field"),
tr("Please enter a name."));
reject();
}
else
{
accept();
}
}

QString FindDialog::findText()
{
return m_ui->lineEdit->text();
}

void FindDialog::changeEvent(QEvent *e)
{
QDialog::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
m_ui->retranslateUi(this);
break;
default:
break;
}
}

chensodon 2010-05-01
  • 打赏
  • 举报
回复
各位帮帮忙吖~~~

16,224

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧