隔了几天阴冷,今天下午闪了一丝阳光。
上次我们学习了如何构造一个简单的小例子,既然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开发练习的例子,用户C++客户端开发
离线安装包,亲测可用
Ajax-Project-AJAX-AddressBook.zip,用php与jquery和ajax一起编写的单页应用程序(spa),ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中...
Java Addressbook. with Sql database create table for backend
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
利用vue进行增删查改。主要由于公司网络限制,上传到csdn以方便自己学习使用
官方版本,亲测可用
java和数据库开发的web通讯录系统,可以实现联系人的添加,修改删除等
节点演示地址簿 测试下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-...
* 1. 添加通讯录 * * 2. 删除通讯录 * * 3. 显示通讯录 * * 4. 电话簿存盘 * * 5. 读出电话簿 * * 6. 查找联系人 * * 7. 退出 *
react-native-addressbook-ios 这是一个用于访问 iOS 地址的 React 目前仅支持 READ 访问,但希望添加完整的 CRUD 支持 演示 确保你已经 ,然后打开 examples/RCTAddressBook.xcodeproj 并点击 Run 用法 在访问...
com.datazuul.apps--datazuul-addressbook datazuul.com - DataZuul 应用程序:地址簿 Little Swing + Derby DB 演示
阐述了Linux 下使用Qt 进行嵌入式开发的一般过程和特点,但没有对其关键技术及程序开发实现过程进行具体的说明。为此,笔者通过
my-addressbook-j2ee-full-stack-application 目标是作为Mphasis竞争的一部分,使用Java EE技术在线存储任意数量的联系人。 ######软件/工具: Eclipse Java EE IDE MySQL数据库 ######使用的技术: HTML和CSS ...
CIS3100--期限项目-地址簿 巴鲁克学院CIS3100课程的学期项目(地址簿申请),2015年夏季
标签:addressbook-address-wsclient-composite-main-1.2.jar.zip,addressbook,address,wsclient,composite,main,1.2,jar.zip包下载,依赖包
标签:addressbook-address-wsclient-app-1.1-RC1-jar-with-dependencies.jar.zip,addressbook,address,wsclient,app,1.1,RC1,jar,with,dependencies,jar.zip包下载,依赖包