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相关文章

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值