QT学习第一天 坚持住!!
一 Qt概述1.Qt发展历史(1)1991年诞生(Haavard Nord/Eirik Chambe-Eng),(2)1994年创立Troll Tech(奇趣科技)(3)2005年QT4.0(4)2008年被Nokia收购(5)2009年源代码开源(6)2012年Nokia将全部QT业务和知识产权卖给Digia公司(7)2013年QT5.0 QT5.1 QT5.2(8)2014年Digia公司成立 The Qt Company子公司2.Qt5.4的安装(1)下载QT安装法(2)运行安装程序(3)根据提示安装到主目录下(4)配置环境变量3.Qt开发相关工具介绍 都在~/QT../…../bin下(1)assistant(帮助手册)在终端输入 assistant &(2)qmake(qt构建器)qmake -v :查看当前所用QT的版本qmake -project :生成和平台无关的工程描述文件(.pro)qmake : 根据工程文件生成和平台相关的Makefilemake :根据qmake所生成的Makefile编译和链接,生成执行文件(3)designer(QT设计师)图形界面的编辑器,用于设计UI界面,得到”.ui”的文件c++不支持…需要转换(4)uic(转换工具).ui ——>> .h(5)qtcreateor(QT创造器)集成开发环境IDE, 包含上面的所有工具4.QT助手的使用eg:查看QApplication类的使用(1)public Type(共有类型,一般不关注)(2)Properties(类中的成员变量)(3)Public Functions(公有成员函数包含构造函数,重点关注)(4)Reimplemented Public Functions(共有的虚函数)(5)Public Slots(槽函数,qt中用slots声明的函数)
class A{ public slots: void func(void);//槽函数 };
(6)Signals(信号函数,用signal声明的函数)
class A{ signal: void sig_func(void);//信号函数 };
(7)Static Public Members(静态成员,需要关注)静态成员不需要对象,可以直接用类名::进行访问(8)Reimplemented Protected Functions(保护的虚函数)(9)Macros(宏,元对象)Q_OBJECTSIGNALSLOT(10)Detailed Description(详细说明,介绍一些主要的函数API的使用等) 二 第一个QT程序1.创建QT工程目录:”Hello”注意:每一个QT程序都要放在一个独立的目录下.2.编写应用程序: “Hello.cpp”3.使用 “qmake -project”生成和平台无关的项目描述文件修改Hello.pro:QT += widgets #加载和窗口组件相关的功能TEMPLATE = app #构建的是一个应用程序TARGET = Hello #最后生成的可执行程序的名字INCLUDEPATH += .#头文件路径4.qmake生成和平台相关的5.make编译链接生成可执行程序,如果出错,修改源代码,重新make即可6.运行测试./Hello*7.在QT中显示中文字符串(1)QT5.4内部使用Unicode(utf-8),QT4.8内部使用utf-16(2)linux默认使用utf8(3)Windows中默认使用ANSI(中文GBK,英文ASK2)(4)解决编码问题引发的错误->>构造编码对象#include <QTextCodec>QTextCoderc *coder = QTextCodec::CodecForName(“当前的编码方式”)编码方式指编写代码时所用的编码,一般linux是utf8,windows是GBK->>通过编码对象将要显示中文的字符串转换成QT内部的编码方式codec->toUnicode(“含有中文的字符串”); <<案例>>构建一个QPushButton对象(按钮),显示中文内容 “按我”(1)用vi编写源程序,构建,正常可以直接显示中文(2)将源程序拷贝window中,用记事本打开,另存为ANSI,替换掉原来文件(3)将ANSI文件拷贝回ubuntu替换原来的程序,重新make,结果是乱码(4)设置编码对象,转换为QT内部编码,再次make,又可以正常显示中文 三 信号和槽函数(重点)1.信号和槽是QT自己定义的一种通信机制,实现不同对象之间数据交互.其实现本质就是函数的调用一个对象发出信号,连接到这个信号的对象会执行相应槽函数.<<案例>>创建一个按钮对象和一个标签对象,点击按钮关闭标签2.建立信号和槽函数连接
QMetaObject::Connection QObject::connect( const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection );
sender:发送信号的对象指针(QObject的子类对象)signal:信号函数receiver:接收信号的对象指针method:槽函数 <<案例>>创建一个按钮对象和一个标签对象,点击按钮关闭标签QPushButton btn(…);QLabel label(…);QObject::connect(&btn,SIGNAL(clicked()),&label,SLOT(close()));