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 : 根据工程文件生成和平台相关的Makefile
make :根据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声明的函数)
1 class A{ 2 public slots: 3 void func(void);//槽函数 4 };
(6)Signals(信号函数,用signal声明的函数)
1 class A{ 2 signal: 3 void sig_func(void);//信号函数 4 };
(7)Static Public Members(静态成员,需要关注)
静态成员不需要对象,可以直接用类名::进行访问
(8)Reimplemented Protected Functions(保护的虚函数)
(9)Macros(宏,元对象)
Q_OBJECT
SIGNAL
SLOT
(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.建立信号和槽函数连接
1 QMetaObject::Connection QObject::connect( 2 const QObject *sender, const QMetaMethod &signal, 3 const QObject *receiver, const QMetaMethod &method, 4 Qt::ConnectionType type = Qt::AutoConnection 5 );
sender:发送信号的对象指针(QObject的子类对象)
signal:信号函数
receiver:接收信号的对象指针
method:槽函数
<<案例>>创建一个按钮对象和一个标签对象,点击按钮关闭标签
QPushButton btn(…);
QLabel label(…);
QObject::connect(&btn,SIGNAL(clicked()),&label,SLOT(close()));