v Push Button widget QPush Button add Button
v 增加数据 Ø 增加三个Push. Button 用于添加数据 Ø 对各个widget命名: QPush. Button *add. Button; QPush. Button *submit. Button; QPush. Button *cancel. Button; QLine. Edit *name. Line; QText. Edit *address. Text; Ø 各个Widget的text和位置, 如图 • 如果位置不合适,考虑加 入verticalspecer
Ø 功能设置 • 添加两个slot: – save. To. File():保存数据 – load. From. File():读取数据 • Qt中文件的读取 写文件: 读文件 QString file. Name = QFile. Dialog: : get. Save. File. Name(this, tr("Save Address Book"), "", tr("Address Book (*. abk); ; All Files (*)")); QString file. Name = QFile. Dialog: : get. Open. File. Name(this, tr("Open Address Book"), "", tr("Address Book (*. abk); ; All Files (*)")); . . QFile file(file. Name); if (!file. open(QIODevice: : Write. Only)) {. . . } if (!file. open(QIODevice: : Read. Only)) {. . . } QData. Stream out(&file); out. set. Version(QData. Stream: : Qt_4_3); QData. Stream in(&file); in. set. Version(QData. Stream: : Qt_4_3); contacts. empty(); // empty existing contacts out << contacts; in >> contacts;
Ø 功能设置 • 导出数据为Vcard的格式(. vcf) out << "BEGIN: VCARD" << "n"; out << "VERSION: 2. 1" << "n"; out << "N: " << last. Name << "; " << first. Name << "n"; if (!name. List. is. Empty()) out << "FN: " << name. List. join(" ") << "n"; else out << "FN: " << first. Name << "n"; address. replace("; ", "\; ", Qt: : Case. Insensitive); address. replace("n", "; ", Qt: : Case. Insensitive); address. replace(", ", " ", Qt: : Case. Insensitive); out << "ADR; HOME: ; " << address << "n"; out << "END: VCARD" << "n";
v 扩充功能 Ø 添加菜单功能 • Qdialog类不自动添加菜 单,需要在ui文件中手 添加菜单,代码如下 <widget class="QMenu. Bar" name="menubar" > <property name="geometry" > <rect> <x>0</x> <y>0</y> <width>277</width> <height>25</height> </rect> </property> </widget> • 然后用designer就可以编 辑菜单了。
Ø 课堂练习: 添加一个“Edit”菜单,并添加Qaction关联 剩余的Push. Button。 Ø 扩充联系: • 为每个Qaction添加快捷键和图标 – save. Action->set. Icon(QIcon(": /images/new. png")); – save. Action->set. Shortcut(tr("Ctrl+S"));
• 添加Action, – 通过下面的代码可以直接在Tool. Bar上添加Action。 » tool. Bar->add. Action(save. Action); » tool. Bar->add. Action(load. Action); – 如果Qaction设置了图标,则在 具栏显示其图标,如果没有 设置图标,则显示其名字。 • 在Tool. Bar上可以继续添加Tool. Bar – file. Tool. Bar = new QTool. Bar(this); – tool. Bar->add. Widget(file. Tool. Bar); • 课堂练习:在Tool. Bar上添加剩余Action
• 功能设置 – Qdialog类没有实现处理QStatus. Bar的功能,根据Status. Tip的 实现机制,扩展Qdialog的event成员函数,增加处理 QStatus. Tip. Event事件的能力。如下: bool Address. Book: : event(QEvent *e) { if(e->type() == QEvent: : Status. Tip) { if(status. Bar != 0) status. Bar->show. Message(static_cast<QStatus. Tip. Event*>(e)->tip()); } return QDialog: : event(e); }
• 修改main. cpp,添加splash. Screen类 int main(int argc, char *argv[]) { QApplication app(argc, argv); QSplash. Screen *splash = new QSplash. Screen; splash->set. Pixmap(QPixmap(": /images/splash. png")); splash->show(); Address. Book *addbook = new Address. Book; Qt: : Alignment top. Right = Qt: : Align. Right | Qt: : Align. Top; splash->show. Message(QObject: : tr("Settring up the program. . . "), top. Right, Qt: : red); addbook->show(); splash->finish(addbook); delete splash; return app. exec(); }
- Slides: 31