QT学习之路四(信号与槽----通讯录的再次改版)
2017-02-14 22:12
471 查看
学了好几天的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
/********************************************************************************
** 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(Q
d4d4
t::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
以上代码若是编译有问题的话,可以到我的网盘下载:http://pan.baidu.com/s/1eRVWrxo
还有上次qt小神童的第三个教程的源代码,可以分享一下:http://pan.baidu.com/s/1cmZ4CY
信号与槽:都是函数,比如单机窗口上的一个按钮想要弹出一个对话框,那么就可以将这个按钮的单击信号和定义的槽关联起来,在这个槽中可以创建一个对话框并且显示,这样单击这个按钮就会发射信号,进而执行槽来显示一个对话框。
话不多说,还是先上代码吧:
/***********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(Q
d4d4
t::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
相关文章推荐
- QT5 学习之路19---深入 Qt5 信号槽新语法
- Qt 学习之路 2(16):深入 Qt5 信号槽新语法
- Qt学习之路_3(VS下Qt的信号与槽初次体验)
- Qt 学习之路 2(4):信号槽
- Qt学习之路_3(VS下Qt的信号与槽初次体验)
- Qt学习之路_3(VS下Qt的信号与槽初次体验)
- Qt 学习之路 2(5):自定义信号槽
- Qt 学习之路 :信号槽
- Qt 学习之路--信号槽
- QT学习之路四(信号与槽----通讯录的再次改版)
- Qt学习——信号与槽机制
- Qt学习之路(37): Qt容器类之关联存储容器
- Qt学习之路_4(Qt UDP的初步使用)
- Qt学习之路_9(Qt中Item Widget初步探索)
- Qt学习之路_8(Qt中与文件目录相关操作)
- 用ISO C++实现自己的信号槽(Qt另类学习)
- Qt学习之路_5(Qt TCP的初步使用)
- Qt移植学习之路 QT4.5.3至mini2440(2)
- Qt移植学习之路 QT4.5.3至mini2440(1)
- Qt学习之路_1(安装及首次体验)