Qt创建一个电话本界面程序

运行效果如图

其中点击Add new 会弹出如下面图中的对话框

具体实现步骤:

一、首先用 Qt Designer 创建一个两张图的对话框,分别保存为listdialog.ui和editdialog.ui文件

要注意其中各个空间对应的名称修改好

二、新建一个Qt应用程序工程,取名为listdialog

三、删除已有的listdialog.ui和ui_listdialog.h,listdialog.h,listdialog.cpp文件

四、将listdialog.ui和editdialog.ui文件复制到工程下并且导入到工程,运行,此时可能会报错,没关系

五、添加文件listdialog.h,listdialog.cpp,editdialog.h,editdialog.cpp

内容如下:

listdialog.h文件

#ifndef LISTDIALOG_H
#define LISTDIALOG_H

#include <QDialog>
#include "ui_listdialog.h"
class ListDialog : public QDialog
{
Q_OBJECT

public:
ListDialog();
~ListDialog();

private slots:
void addItem();
void editItem();
void deleteItem();

private:
Ui::ListDialog ui;
};
#endif // LISTDIALOG_H

listdialog.cpp文件

#include "listdialog.h"
#include "editdialog.h"

ListDialog::ListDialog()
: QDialog()
{
ui.setupUi(this);

connect(ui.addButton,SIGNAL(clicked()),this,SLOT(addItem()));
connect(ui.editButton,SIGNAL(clicked()),this,SLOT(editItem()));
connect(ui.deleteButton,SIGNAL(clicked()),this,SLOT(deleteItem()));
}

ListDialog::~ListDialog()
{

}
void ListDialog::addItem()
{
EditDialog dlg(this);
if(dlg.exec()==1)
ui.list->addItem(dlg.name()+"--"+dlg.number());
}
void ListDialog::editItem()
{
if(!ui.list->currentItem())
return;
QStringList parts=ui.list->currentItem()->text().split("--");
EditDialog dlg(this);
dlg.setName(parts[0].trimmed());
dlg.setNumber(parts[1].trimmed());

if(dlg.exec()==1)
ui.list->currentItem()->setText(dlg.name()+"--"+dlg.number());
}
void ListDialog::deleteItem()
{
delete ui.list->currentItem();
}

editdialog.h 文件

#ifndef EDITDIALOG_H
#define EDITDIALOG_H

#include <QDialog>
#include "ui_editdialog.h"

class EditDialog:public QDialog
{
public:
EditDialog(QWidget*parent=0);
const QString name() const;
void setName(const QString&);
const QString number() const;
void setNumber(const QString&);
private:
Ui::EditDialog ui;
};
#endif

editdialog.cpp 文件

#include "editdialog.h"
EditDialog::EditDialog(QWidget *parent):QDialog(parent)
{

ui.setupUi(this);
}
const QString EditDialog::name()const
{
return ui.nameEdit->text().replace("--","").trimmed();
}
const QString EditDialog::number() const
{
return ui.numberEdit->text().trimmed();
}
void EditDialog::setName(const QString &name)
{
ui.nameEdit->setText(name);
}
void EditDialog::setNumber(const QString &number)
{
ui.numberEdit->setText(number);
}

注意还要查看自动生成的 ui_editdialog.h 和 ui_listdialog.h

根据需要修改类的名称,上例中需要将ui_editdialog.h修改为如下:

#ifndef UI_EDITDIALOG_H
#define UI_EDITDIALOG_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QDialogButtonBox>
#include <QtGui/QHBoxLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_EditDialog
{
public:
    QDialogButtonBox *buttonBox;
    QWidget *layoutWidget;
    QHBoxLayout *horizontalLayout;
    QVBoxLayout *verticalLayout;
    QLabel *label;
    QLabel *label_2;
    QVBoxLayout *verticalLayout_2;
    QLineEdit *nameEdit;
    QLineEdit *numberEdit;

    void setupUi(QDialog *Dialog)
    {
        if (Dialog->objectName().isEmpty())
            Dialog->setObjectName(QString::fromUtf8("Dialog"));
        Dialog->resize(360, 125);
        buttonBox = new QDialogButtonBox(Dialog);
        buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
        buttonBox->setGeometry(QRect(0, 80, 341, 41));
        buttonBox->setOrientation(Qt::Horizontal);
        buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
        layoutWidget = new QWidget(Dialog);
        layoutWidget->setObjectName(QString::fromUtf8("layoutWidget"));
        layoutWidget->setGeometry(QRect(10, 10, 331, 51));
        horizontalLayout = new QHBoxLayout(layoutWidget);
        horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
        horizontalLayout->setContentsMargins(0, 0, 0, 0);
        verticalLayout = new QVBoxLayout();
        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
        label = new QLabel(layoutWidget);
        label->setObjectName(QString::fromUtf8("label"));

        verticalLayout->addWidget(label);

        label_2 = new QLabel(layoutWidget);
        label_2->setObjectName(QString::fromUtf8("label_2"));

        verticalLayout->addWidget(label_2);


        horizontalLayout->addLayout(verticalLayout);

        verticalLayout_2 = new QVBoxLayout();
        verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
        nameEdit = new QLineEdit(layoutWidget);
        nameEdit->setObjectName(QString::fromUtf8("nameEdit"));

        verticalLayout_2->addWidget(nameEdit);

        numberEdit = new QLineEdit(layoutWidget);
        numberEdit->setObjectName(QString::fromUtf8("numberEdit"));

        verticalLayout_2->addWidget(numberEdit);


        horizontalLayout->addLayout(verticalLayout_2);

        QWidget::setTabOrder(nameEdit, numberEdit);
        QWidget::setTabOrder(numberEdit, buttonBox);

        retranslateUi(Dialog);
        QObject::connect(buttonBox, SIGNAL(accepted()), Dialog, SLOT(accept()));
        QObject::connect(buttonBox, SIGNAL(rejected()), Dialog, SLOT(reject()));

        QMetaObject::connectSlotsByName(Dialog);
    } // setupUi

    void retranslateUi(QDialog *Dialog)
    {
        Dialog->setWindowTitle(QApplication::translate("Dialog", "Dialog", 0, QApplication::UnicodeUTF8));
        label->setText(QApplication::translate("Dialog", "Name:", 0, QApplication::UnicodeUTF8));
        label_2->setText(QApplication::translate("Dialog", "Number:", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class EditDialog: public Ui_EditDialog {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_EDITDIALOG_H

现在编译运行就可以了

注意ui_editdialog.h有时候打不开,需要先编译一下,有错误没关系然后就可以打开了

posted @ 2011-10-03 01:33  哈哈开心  阅读(2847)  评论(0编辑  收藏  举报