学了好几天的qt,今天又学了信号与槽函数,心中总有个想法-----把之前的通讯录用qt改一下。
信号与槽:都是函数,比如单机窗口上的一个按钮想要弹出一个对话框,那么就可以将这个按钮的单击信号和定义的槽关联起来,在这个槽中可以创建一个对话框并且显示,这样单击这个按钮就会发射信号,进而执行槽来显示一个对话框。
话不多说,还是先上代码吧:
/***********addr.h************************/
#ifndef ADDR_H
#define ADDR_H
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <QString>
using namespace std;
class Addr
{
public:
int m_ID;
QString m_name;
QString m_tel;
QString m_address;
QString m_company_phone;
};
#endif // ADDR_H
/************address_book.h*********************/
#ifndef ADDRESS_BOOK_H
#define ADDRESS_BOOK_H
#include <QWidget>
#include <QTextCodec>
#include <QString>
#include <QInputDialog>
#include <QLineEdit>
#include <qDebug>
#include <QVector>
#include "addr.h"
namespace Ui {
class address_book;
}
class address_book : public QWidget
{
Q_OBJECT
public:
explicit address_book(QWidget *parent = 0);
~address_book();
public slots:
void on_addfriend_clicked();
void on_Pint_clicked();
void on_select_clicked();
void on_Delete_clicked();
private:
Ui::address_book *ui;
QVector<Addr> tong;
QVector<Addr>::iterator it;
};
#endif // ADDRESS_BOOK_H
/********************************************************************************
** Form generated from reading UI file 'address_book.ui'
**
** Created: Tue Feb 14 20:28:06 2017
** by: Qt User Interface Compiler version 4.8.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_ADDRESS_BOOK_H
#define UI_ADDRESS_BOOK_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QGridLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include <QtGui/QWidget>
QT_BEGIN_NAMESPACE
class Ui_address_book
{
public:
QWidget *gridLayoutWidget;
QGridLayout *gridLayout;
QPushButton *addfriend;
QPushButton *Pint;
QPushButton *select;
QPushButton *Delete;
QLabel *label;
void setupUi(QWidget *address_book)
{
if (address_book->objectName().isEmpty())
address_book->setObjectName(QString::fromUtf8("address_book"));
address_book->resize(411, 315);
gridLayoutWidget = new QWidget(address_book);
gridLayoutWidget->setObjectName(QString::fromUtf8("gridLayoutWidget"));
gridLayoutWidget->setGeometry(QRect(80, 20, 251, 271));
gridLayout = new QGridLayout(gridLayoutWidget);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(11, 11, 11, 11);
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
gridLayout->setContentsMargins(0, 0, 0, 0);
addfriend = new QPushButton(gridLayoutWidget);
addfriend->setObjectName(QString::fromUtf8("addfriend"));
gridLayout->addWidget(addfriend, 1, 0, 1, 1);
Pint = new QPushButton(gridLayoutWidget);
Pint->setObjectName(QString::fromUtf8("Pint"));
gridLayout->addWidget(Pint, 2, 0, 1, 1);
select = new QPushButton(gridLayoutWidget);
select->setObjectName(QString::fromUtf8("select"));
gridLayout->addWidget(select, 3, 0, 1, 1);
Delete = new QPushButton(gridLayoutWidget);
Delete->setObjectName(QString::fromUtf8("Delete"));
gridLayout->addWidget(Delete, 4, 0, 1, 1);
label = new QLabel(gridLayoutWidget);
label->setObjectName(QString::fromUtf8("label"));
label->setMinimumSize(QSize(130, 30));
label->setMaximumSize(QSize(130, 30));
label->setAlignment(Qt::AlignCenter);
gridLayout->addWidget(label, 0, 0, 1, 1);
retranslateUi(address_book);
QMetaObject::connectSlotsByName(address_book);
} // setupUi
void retranslateUi(QWidget *address_book)
{
address_book->setWindowTitle(QApplication::translate("address_book", "address_book", 0, QApplication::UnicodeUTF8));
addfriend->setText(QApplication::translate("address_book", "\346\267\273\345\212\240\345\245\275\345\217\213", 0, QApplication::UnicodeUTF8));
Pint->setText(QApplication::translate("address_book", "\345\210\227\350\241\250\345\245\275\345\217\213", 0, QApplication::UnicodeUTF8));
select->setText(QApplication::translate("address_book", "\346\237\245\350\257\242\345\245\275\345\217\213", 0, QApplication::UnicodeUTF8));
Delete->setText(QApplication::translate("address_book", "\345\210\240\351\231\244\345\245\275\345\217\213", 0, QApplication::UnicodeUTF8));
label->setText(QApplication::translate("address_book", "\351\200\232\350\256\257\345\275\225", 0, QApplication::UnicodeUTF8));
} // retranslateUi
};
namespace Ui {
class address_book: public Ui_address_book {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_ADDRESS_BOOK_H
/**************address_book.cpp******************************/
#include "address_book.h"
#include "addr.h"
#include "ui_address_book.h"
#include <QMessageBox>
#include <QProgressDialog>
#include <QCoreApplication>
#include <QErrorMessage>
#include <QVBoxLayout>
#include <QFont>
int i = 0;
address_book::address_book(QWidget *parent) :
QWidget(parent),
ui(new Ui::address_book)
{
ui->setupUi(this);
}
address_book::~address_book()
{
delete ui;
}
void address_book::on_addfriend_clicked()
{
bool ok;
i++;
QInputDialog ecf;
ecf.resize(1000,1000);
QString name = ecf.getText(this, tr("添加好友"),tr("请输入用户名:"),QLineEdit::Normal, NULL,&ok);
if(ok)
{
qDebug()<<"string:"<<name;
}
QString tel = ecf.getText(this, tr("添加好友"),tr("请输入手机号:"),QLineEdit::Normal, NULL,&ok);
if(ok)
{
qDebug()<<"string:"<<tel;
}
int len = tel.length();
while(len != 11) //判断输入的手机号码是不是11位的
{
tel = QInputDialog::getText(this, tr("添加好友"),tr("请输入11位手机号:"),QLineEdit::Normal, NULL,&ok);
len = tel.length();
}
QString address = ecf.getText(this, tr("添加好友"),tr("请输入家庭住址:"),QLineEdit::Normal, NULL,&ok);
if(ok)
{
qDebug()<<"string:"<<address;
}
QString company_phone = ecf.getText(this, tr("添加好友"),tr("请输入家庭号码:"),QLineEdit::Normal, NULL,&ok);
if(ok)
{
qDebug()<<"string:"<<company_phone;
}
Addr *one = new Addr;
one->m_ID = i;
one->m_name = name;
one->m_tel = tel;
one->m_address = address;
one->m_company_phone = company_phone;
tong.push_back(*one);
QProgressDialog dialog(tr("正在添加好友"),tr("取消"), 0, 3000, this);
dialog.setWindowTitle(tr("进度"));
dialog.setWindowModality(Qt::WindowModal);
dialog.show();
for(int k = 0; k < 3000; k++)
{
dialog.setValue(k);
QCoreApplication::processEvents();
if(dialog.wasCanceled())
{
break;
}
}
dialog.setValue(3000);
qDebug()<<tr("添加好友成功");
// QLabel *label = new QLabel(tr("添加好友成功"));
// label->resize(100,100);
// label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
// label->show();
QMessageBox::information(this, tr("添加结果"), tr("添加好友成功"), QMessageBox::Ok);
}
void address_book::on_Pint_clicked()
{
if(tong.size() == 0)
{
QErrorMessage *err = new QErrorMessage(this);
err->setWindowTitle(tr("错误信息"));
err->showMessage(tr("通讯录中暂时无人!"));
return;
}
QLabel *label = new QLabel;
label->adjustSize();label->resize(500,300);
label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QString str;
QFont ft;
ft.setPointSize(13); //设置字体大小
ft.setBold(true); //设置字体加粗,类似的还有斜体等等
label->setFont(ft);
for(int k = 0; k < tong.size(); k++)
{
str.append(tong[k].m_name);
str.append(" ");
str.append(tong[k].m_tel);
str.append(" ");
str.append(tong[k].m_address);
str.append(" ");
str.append(tong[k].m_company_phone);
str.append("\n");
}
label->setText(str);
label->show();
}
void address_book::on_select_clicked()
{
if(tong.size() == 0)
{
QErrorMessage *err = new QErrorMessage(this);
err->setWindowTitle(tr("错误信息"));
err->showMessage(tr("通讯录中暂时无人!"));
return;
}
bool ok;
QString name = QInputDialog::getText(this, tr("查询好友"),tr("请输入用户名:"),QLineEdit::Normal, NULL,&ok);
if(ok)
{
qDebug()<<"string:"<<name;
}
QProgressDialog dialog(tr("正在查询好友"),tr("取消"), 0, 3000, this);
dialog.setWindowTitle(tr("进度"));
dialog.setWindowModality(Qt::WindowModal);
dialog.show();
for(int k = 0; k < 3000; k++)
{
dialog.setValue(k);
QCoreApplication::processEvents();
if(dialog.wasCanceled())
{
break;
}
}
dialog.setValue(3000);
int flag = 1;
QString str;
QLabel *label = new QLabel;
label->adjustSize();label->resize(500,300);
label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QFont ft;
ft.setPointSize(13); //设置字体大小
ft.setBold(true); //设置字体加粗,类似的还有斜体等等
label->setFont(ft);
for(int k = 0; k < tong.size(); k++)
{
if(tong[k].m_name == name)
{
flag = 0;
str.append(tong[k].m_name);
str.append(" ");
str.append(tong[k].m_tel);
str.append(" ");
str.append(tong[k].m_address);
str.append(" ");
str.append(tong[k].m_company_phone);
str.append("\n");
}
}
if(flag == 0)
{
label->setText(str);
label->show();
}
else
{
QErrorMessage *err = new QErrorMessage(this);
err->setWindowTitle(tr("错误信息"));
err->showMessage(tr("查无此人!"));
}
}
void address_book::on_Delete_clicked()
{
bool ok;
QString name = QInputDialog::getText(this, tr("删除好友"),tr("请输入用户名:"),QLineEdit::Normal, NULL,&ok);
if(ok)
{
qDebug()<<"string:"<<name;
}
QProgressDialog dialog(tr("正在删除好友"),tr("取消"), 0, 3000, this);
dialog.setWindowTitle(tr("进度"));
dialog.setWindowModality(Qt::WindowModal);
dialog.show();
for(int k = 0; k < 3000; k++)
{
dialog.setValue(k);
QCoreApplication::processEvents();
if(dialog.wasCanceled())
{
break;
}
}
dialog.setValue(3000);
if(tong.size() == 0)
{
QErrorMessage *err = new QErrorMessage(this);
err->setWindowTitle(tr("错误信息"));
err->showMessage(tr("通讯录中暂时无人!"));
return;
}
int flag = 1;
QLabel *label = new QLabel;
label->adjustSize();
label->resize(400,300);
label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
QFont ft;
ft.setPointSize(13); //设置字体大小
ft.setBold(true); //设置字体加粗,类似的还有斜体等等
label->setFont(ft);
for(it = tong.begin(); it != tong.end(); it++)
{
if(it->m_name == name)
{
flag = 0;
tong.erase(it);
QMessageBox::information(this, tr("删除结果"), tr("删除成功"), QMessageBox::Ok);
return;
}
}
if(flag)
{
QErrorMessage *err = new QErrorMessage(this);
err->setWindowTitle(tr("错误信息"));
err->showMessage(tr("查无此人!"));
}
}
/***********main.cpp************************/
#include <QtGui/QApplication>
#include "address_book.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
address_book w;
w.show();
return a.exec();
}
以上代码若是编译有问题的话,可以到我的网盘下载:http://pan.baidu.com/s/1eRVWrxo
还有上次qt小神童的第三个教程的源代码,可以分享一下:http://pan.baidu.com/s/1cmZ4CY