具体实现步骤:
一、首先用 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
#ifndefLISTDIALOG_H
#defineLISTDIALOG_H
#include<QDialog>
#include"ui_listdialog.h"
classListDialog : public QDialog
{
Q_OBJECT
public:
ListDialog();
~ListDialog();
privateslots:
voidaddItem();
voideditItem();
voiddeleteItem();
private:
Ui::ListDialogui;
};
#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()
{
EditDialogdlg(this);
if(dlg.exec()==1)
ui.list->addItem(dlg.name()+"--"+dlg.number());
}
void ListDialog::editItem()
{
if(!ui.list->currentItem())
return;
QStringListparts=ui.list->currentItem()->text().split("--");
EditDialogdlg(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()
{
deleteui.list->currentItem();
}
//
editdialog.h
#ifndefEDITDIALOG_H
#defineEDITDIALOG_H
#include<QDialog>
#include"ui_editdialog.h"
classEditDialog:public QDialog
{
public:
EditDialog(QWidget*parent=0);
constQString name() const;
voidsetName(const QString&);
constQString number() const;
voidsetNumber(const QString&);
private:
Ui::EditDialogui;
};
#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);
}
voidEditDialog::setNumber(const QString &number)
{
ui.numberEdit->setText(number);
}
注意还要查看自动生成的 ui_editdialog.h 和 ui_listdialog.h
根据需要修改类的名称,上例中需要将ui_editdialog.h修改为如下:
#ifndefUI_EDITDIALOG_H
#defineUI_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;
voidsetupUi(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
voidretranslateUi(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
现在编译运行就可以了
程序运行效果如图