小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

Qt入门(5)——用Qt控件创建一个电话本界面

 

具体实现步骤:

一、首先用 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


现在编译运行就可以了


程序运行效果如图


 

 

 

 

 

 

 

 

 

 

posted on 2014-09-04 10:53  牛栏山1  阅读(131)  评论(0编辑  收藏  举报

导航