`
javasogo
  • 浏览: 1822034 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

QT(3)对象和继承-Addressbook例子1

阅读更多

  隔了几天阴冷,今天下午闪了一丝阳光。

  上次我们学习了如何构造一个简单的小例子,既然QT是C++ based,因此需要知晓如何创建一个对象以及实现对象的继承,同时我们对Layout中的QGridLayout进行学习。

  在上次的例子中,我们知道如果创建一个不带parent的QWidget,那么这个widget就视为一个window。现在,我们创建这样一个windows的类,将这个window作为panel在上面摆放各种组件,因此该类继承QWidget。这个类名称为Addressbook,因此创建两个文件addressbook.cpp,addressbook.h,以及主函数所在qtmain.cpp。

  相关参考:http://doc.qt.nokia.com/latest/tutorials-addressbook-part1.html

  在这个Addressbook的windows上,我们采用GuidLayout的方式来排放,下图是最后的执行结果,左图是在Handset模拟器运行,右图在ubuntu上的运行,并加上了组件摆放位置。

一、写*.pro文件

#和以前的例子像比较,增加了TARGET缺省为*.pro文件的名字,如果不同,需要重新定义,并且将所需编译的头文件和源代码文件补充如SOURCES和HEADERS两个参数
TARGET = local-test2
SOURCES = qtmain.cpp addressbook.cpp
HEADERS = addressbook.h

VPATH = src
OBJECTS_DIR = build
DESTDIR = build

二、对象的头文件:addressbook.h

/* addressbook.h - 定义AddressBook类,作为QWidget的一个继承子类,并定义一个constructor。 */
#ifndef COM_WEI_ADDRESSBOOK_H
#define COM_WEI_ADDRESSBOOK_H

#include <QWidget>
/* 由于我们在AddressBook中使用了QLineEdit和QTextEdit两个类,不在QWidget的定义范围,因此为了保证编译通过,需要在此处定义(感觉有些像C里面的extern定义),否则在编译的时候会报告:的在ISO C++ forbids declaration of ‘QLineEdit’ with no type 。如果#include <QtGui>,不加这个两个也可以,但是会生成一个moc_addressbook.cpp的文件。*/
class QLineEdit;
class QTextEdit;

class AddressBook : public QWidget //注意继承的书写方式
{
/* 我们使用Q_OBECT宏定义来表明该类使用QT很多优秀的特性,包括signal和slots等等。即使我们不使用这些特性和功能,仍建议进行定义。在当前我们肤浅的学习,可以简单地认为Q_OBJECT宏定义是允许我们使用QT的tr()和connect()函数的shortcut.*/
Q_OBJECT

public:
AddressBook(QWidget * parent = NULL);

private:
QLineEdit * nameLine;
QTextEdit * addressText;
};

#endif

三、对象源文件:addressbook.cpp

/* addressbook.cpp - the implementation file for the AddressBook class */
#include <QtGui>
#include "addressbook.h"

AddressBook :: AddressBook (QWidget * parent) : QWidget (parent) //集成构造函数,并注意继承的书写格式。
{
QLabel * nameLabel = new QLabel(tr("Name:"));
nameLine = new QLineEdit;

QLabel * addressLabel = new QLabel(tr("Address:"));
addressText = new QTextEdit;

//这里介绍了采用GridLayout的排版方式,见上面右图,将panel分割为(x,y)的二维空间,在每个位置采用addWidget进行排版。另外如果没有参数,我们看到new QGridLayout()也可以写成 new QGridLayout。
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);

setLayout(mainLayout); //由于是QWidget的继承,可以直接使用setLayout
setWindowTitle(tr ("Simple Address Book")); //这里使用了tr(),也就是Q_OBJECT,这个translate的使用方式还不太晓得,可以作为编码格式的转换。
}

四、主文件main()

/* qtmain.cpp - the file containing a main() function, with an instance of AddressBook. */
#include <QtGui>
#include "addressbook.h"

int main(int argc, char * argv[])
{
QApplication app(argc,argv);

AddressBook addressBook;
addressBook.show();

return app.exec();
}

相关链接:我的MeeGo/Moblin相关文章

分享到:
评论

相关推荐

    QT-addressbook-chapter2

    QT-addressbook-chapter2是一个基于QT框架的C++客户端开发示例项目,旨在帮助开发者学习如何使用QT库创建一个简单的地址簿应用。QT是一个流行的、跨平台的开发工具包,支持Windows、Linux、macOS等多种操作系统,...

    qt5-qtsensors-examples-5.15.2-2.el8.x86_64.rpm

    离线安装包,亲测可用

    Ajax-Project-AJAX-AddressBook.zip

    Ajax-Project-AJAX-AddressBook.zip,用php与jquery和ajax一起编写的单页应用程序(spa),ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中...

    java-addressbook.rar_java的Addressbook_通讯录web

    【标题】"java-addressbook.rar" 是一个基于Java技术开发的Web通讯录系统,名为"Java的Addressbook_通讯录Web"。这个项目的核心功能是实现对个人联系人的管理,包括添加、修改和删除等基本操作,这在日常工作中非常...

    VUE-AddressBook-master.zip

    在这个"VUE-AddressBook-master.zip"压缩包中,我们可以预见到一个使用Vue.js开发的联系人地址簿应用实例。 1. **Vue基础知识**: - **数据绑定**:Vue的核心特性之一是双向数据绑定,通过`v-model`指令,可以将...

    java-addressbook.zip_Table_addressbook

    Java Addressbook是一个基于Java开发的联系人管理应用,它利用SQL数据库作为后端存储来创建和管理联系人信息。这个项目的核心目标是实现一个高效、可靠且用户友好的地址簿系统,通过表格形式展示和操作数据。下面...

    CIS3100--Term-Project--AddressBook:2015年夏季,巴鲁克

    1. 面向对象:C++支持类和对象的概念,允许创建复杂的程序结构,模拟现实世界中的实体。 2. 封装:通过将数据和操作数据的方法封装在类中,可以隐藏内部细节,提高代码的安全性和可维护性。 3. 继承:继承允许创建新...

    axon-addressbook-app-0.5.jar

    官方版本,亲测可用

    axon-addressbook-app-0.5-sources.jar

    官方版本,亲测可用

    axon-addressbook-consoleui-0.5.jar

    官方版本,亲测可用

    axon-addressbook-consoleui-0.5-sources.jar

    官方版本,亲测可用

    axon-addressbook-flexui-war-0.5-sources.jar

    官方版本,亲测可用

    嵌入式Linux 下的Qt通讯簿程序设计.pdf

    接着,文章强调了Qt框架的优势,指出Qt采用了Signal和Slot机制来实现对象之间的通信,这种方法比传统的回调函数更安全可靠。由于Qt框架的开放源码特性,使得在Linux环境下开发嵌入式GUI应用程序成为了一个理想的选择...

    node-demo-addressbook

    节点演示地址簿 测试下Mac OS X Linux(通过 Travis-CI)安装和调试: $ git clone https://github.com/mrcrgl/node-demo-addressbook.git$ cd node-demo-addressbook$ npm install$ npm run-script test$ npm run-...

    loop-back-addressbook

    在"loop-back-addressbook-master"这个压缩包文件中,我们预期会找到以下文件和目录结构: 1. `server`: 这个目录包含了LoopBack服务器端代码,如`model-config.json`用于配置模型,`server.js`作为服务器入口文件...

    C++语言实现的通讯录管理系统-AddressBook

    * 1. 添加通讯录 * * 2. 删除通讯录 * * 3. 显示通讯录 * * 4. 电话簿存盘 * * 5. 读出电话簿 * * 6. 查找联系人 * * 7. 退出 *

    com.datazuul.apps--datazuul-addressbook:datazuul.com - DataZuul 应用程序

    这个项目的源代码可以在名为"com.datazuul.apps--datazuul-addressbook-master"的压缩包中找到。 首先,我们来深入了解Java这一编程语言。Java是一种广泛使用的面向对象的语言,以其跨平台的特性而闻名。它提供了...

    react-native-addressbook-ios:将本机模块桥接到 iOS 地址簿

    react-native-addressbook-ios 这是一个用于访问 iOS 地址的 React 目前仅支持 READ 访问,但希望添加完整的 CRUD 支持 演示 确保你已经 ,然后打开 examples/RCTAddressBook.xcodeproj 并点击 Run 用法 在访问...

    addressBook

    《Qt4 图形设计与嵌入式开发》一书中的"addressBook"章节,主要讲述了如何使用Qt4框架来创建一个联系人管理应用,这在实际的桌面和嵌入式软件开发中非常常见。Qt4是一个强大的跨平台应用程序开发框架,支持Windows、...

    Qt_addressBook

    在 **addressBook-build-desktop** 文件夹中,这是Qt Creator的构建目录,包含了编译过程中产生的临时文件和可执行文件。当你在Qt Creator中编译项目时,编译器会将源代码转换为特定平台的二进制文件,这个目录就是...

Global site tag (gtag.js) - Google Analytics