博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt学习(002-3)
阅读量:6344 次
发布时间:2019-06-22

本文共 5803 字,大约阅读时间需要 19 分钟。

hot3.png

此次是添加查看条目功能。
Qt5.1.1下用creator建立项目addressbook。

创建addressbook.h:

#ifndef ADDRESSBOOK_H#define ADDRESSBOOK_H#include 
#include
#include
#include
#include
#include
class AddressBook : public QWidget{ Q_OBJECTpublic: AddressBook(QWidget *parent = 0);public slots: void addContact(); void submitContact(); void cancel(); void next(); void previous();private: QPushButton *addButton; QPushButton *submitButton; QPushButton *cancelButton; QPushButton *nextButton; QPushButton *previousButton; QLineEdit *nameLine; QTextEdit *addressText; QMap
contacts; QString oldName; QString oldAddress;};#endif // ADDRESSBOOK_H

可以看到新增了两个按钮:nextButton和previousButton;新增了两个槽next()、previous()。

新建addressbook.cpp:

#include "addressbook.h"#include 
#include
#include
#include
#include
AddressBook::AddressBook(QWidget *parent) : QWidget(parent){ QLabel *nameLabel = new QLabel(tr("Name:")); nameLine = new QLineEdit; nameLine->setReadOnly(true); QLabel *addressLabel = new QLabel(tr("Address:")); addressText = new QTextEdit; addressText->setReadOnly(true); addButton = new QPushButton(tr("&Add")); addButton->show(); submitButton = new QPushButton(tr("&Submit")); submitButton->hide(); cancelButton = new QPushButton(tr("&Cancel")); cancelButton->hide(); connect(addButton, SIGNAL(clicked()), this, SLOT(addContact())); connect(submitButton, SIGNAL(clicked()), this, SLOT(submitContact())); connect(cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); QVBoxLayout *buttonLayout1 = new QVBoxLayout; buttonLayout1->addWidget(addButton, Qt::AlignTop); buttonLayout1->addWidget(submitButton); buttonLayout1->addWidget(cancelButton); buttonLayout1->addStretch(); nextButton = new QPushButton(tr("&Next")); nextButton->setEnabled(false); previousButton = new QPushButton(tr("&Previous")); previousButton->setEnabled(false); connect(nextButton, SIGNAL(clicked()), this, SLOT(next())); connect(previousButton, SIGNAL(clicked()), this, SLOT(previous())); QHBoxLayout *buttonLayout2 = new QHBoxLayout; buttonLayout2->addWidget(previousButton); buttonLayout2->addWidget(nextButton); QGridLayout *mainLayout = new QGridLayout; mainLayout->addWidget(nameLabel, 0, 0); mainLayout->addWidget(nameLine, 0, 1); mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop); mainLayout->addWidget(addressText, 1, 1); mainLayout->addLayout(buttonLayout1, 1, 2); mainLayout->addLayout(buttonLayout2, 2, 1); setLayout(mainLayout); setWindowTitle(tr("Simple Address Book"));}void AddressBook::addContact(){ oldName = nameLine->text(); oldAddress = addressText->toPlainText(); nameLine->clear(); addressText->clear(); nameLine->setReadOnly(false); nameLine->setFocus(Qt::OtherFocusReason); addressText->setReadOnly(false); addButton->setEnabled(false); submitButton->show(); cancelButton->show();}void AddressBook::submitContact(){ QString name = nameLine->text(); QString address = addressText->toPlainText(); if (name.isEmpty() || address.isEmpty()) { QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address.")); return; } if (!contacts.contains(name)) { contacts.insert(name, address); QMessageBox::information(this, tr("Add Successful"), tr("\"%1\" has been added to your address book.").arg(name)); } else { QMessageBox::information(this, tr("Add Unsuccessful"), tr("Sorry, \"%1\" is already in your address book.").arg(name)); return; } if (contacts.isEmpty()) { nameLine->clear(); addressText->clear(); } nameLine->setReadOnly(true); addressText->setReadOnly(true); addButton->setEnabled(true); submitButton->hide(); cancelButton->hide(); int number = contacts.size(); nextButton->setEnabled(number > 1); previousButton->setEnabled(number > 1);}void AddressBook::cancel(){ nameLine->setText(oldName); nameLine->setReadOnly(true); addressText->setText(oldAddress); addressText->setReadOnly(true); addButton->setEnabled(true); submitButton->hide(); cancelButton->hide();}void AddressBook::next(){ QString name = nameLine->text(); QMap
::iterator i = contacts.find(name); if (i != contacts.end()) i++; if (i == contacts.end()) i = contacts.begin(); nameLine->setText(i.key()); addressText->setText(i.value());}void AddressBook::previous(){ QString name = nameLine->text(); QMap
::iterator i = contacts.find(name); if (i == contacts.end()){ nameLine->clear(); addressText->clear(); return; } if (i == contacts.begin()) i = contacts.end(); i--; nameLine->setText(i.key()); addressText->setText(i.value());}
在构造函数中可以看到新建了水平布局buttonLayout2,并将nextButton和previousButton添加到该布局中。buttonLayout2布局被添加到mainLayout布局中。
next()和previous()方法中主要是对QMap对象的操作。  contacts对象的find()方法会返回一个STL风格的迭代器,该迭代器是key等于find()参数的第一个键值对。
关于QMap,详细见: 。
开始时候,next和previous按钮是禁用状态,但是在submitContact()中的:
int number = contacts.size();    nextButton->setEnabled(number > 1);    previousButton->setEnabled(number > 1);
当添加的条目大于1时候,这两个按钮被激活。

修改main.cpp:

#include "addressbook.h"#include 
int main(int argc, char *argv[]){ QApplication a(argc, argv); AddressBook addressBook; addressBook.show(); return a.exec();}

运行结果:

#include "addressbook.h"#include 
int main(int argc, char *argv[]){ QApplication a(argc, argv); AddressBook addressBook; addressBook.show(); return a.exec();}

参考:

http://qt-project.org/doc/qt-4.8/tutorials-addressbook-part3.html

转载于:https://my.oschina.net/letiantian/blog/177997

你可能感兴趣的文章
ssh bash 通配符
查看>>
seajs在jquery多个版本下引用jquery的插件的方案
查看>>
关于网络上java,php和.net的“口角之争“的一点想法 !
查看>>
python 第二周(第十三天) 我的python成长记 一个月搞定python数据挖掘!(21) -正则表达式re...
查看>>
[POI2011]SEJ-Strongbox
查看>>
20文件
查看>>
Android开发Intent应用概述
查看>>
【Go】并发编程
查看>>
获取JAVA对象占用的内存大小
查看>>
VMware虚拟化NSX-Manager命令行更改admin用户密码
查看>>
悦纳自己
查看>>
python字符串函数
查看>>
iOS-触摸事件、手势识别、摇晃事件、耳机线控
查看>>
牛腩新闻发布系统 (3) 存过过程或函数""需要""参数,但未提供该参数
查看>>
ORM框架Hibernate (四)MyEclipse Hibernate Tool 逆向生成实体类
查看>>
js中substr与substring的区别
查看>>
去掉iphone连接电脑时会出现的弹出窗口
查看>>
【python】-- web开发之HTML
查看>>
vs2015 去除 git 源代码 绑定
查看>>
解决firefox的button按钮文字不能垂直居中
查看>>