菜鸟笔记
提升您的技术认知

qt的概述-ag真人游戏

qt的概述

1.什么是qt
  qt是一个跨平台的c 图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形所需的所有功能。它是完全面向对象的,容易扩展,并且允许真正的组件编程。

2.qt的发展史
1991年,qt最早由奇趣科技开发
1996年,进入商业领域,它也是目前流行的linux桌面环境kde的基础
2008年,奇趣科技被诺基亚收公司收购,qt称为诺基亚旗下的编程语言
2012年,qt又被digia公司收购
2014年,跨平台的集成开发环境qt creator 3.1.0发布,同年5月20日配发了qt 5.3 正式版,至此qt实现了对ios、android、wp等各平台的全面支持。
3.qt支持的平台
windows - xp、vista、win7、win8、win2008、win10
linux/x11 - linux、sun solaris、hp-ux、compaq tru64 unix、ibm aix、sgi irix、freebsd、bsd/os和其他很多x11平台
macintosh - mac os x(即所有的苹果系统均支持)
embedded - 有帧缓冲支持的嵌入式linux平台,windows ce
4.qt版本
qt按照不同的版本发行,分为商业版和开源版。

商业版----为商业软件提供开发,他们提供传统商业软件开发版,并且提供在商业有效期内的免费升级和ag真人游戏的技术支持服务。

开源的lgpl版本---为了开发自由而设计的开放源码软件,它提供了和商业版同样的功能。在gnu通用公用许可下,它是免费的。

5.qt的优点
跨平台,几乎支持所有的平台
接口简单,容易上手,学习qt框架对学习其它框架有参考意义
一定程度上简化内存回收机制
开发效率高,能够快速构建应用程序
有很好的社区氛围,市场份额在缓慢上升
可以进行嵌入式开发
6.市面上成功的案例
linux桌面环境kde
wps office办公软件
skype 网络电话
google earth 谷歌地图
vlc多媒体播放器
virtualbox虚拟机软件

创建第一个qt程序

0.选择new project或者工具栏新建文件

选择一个模板----qt widgets application


1.点击创建项目后,选择项目路径以及给项目起名称
名称:不能有中文,不能有空格
路径:不能有中文路径

 

注意点:

  创建时的创建路径必须是全英文的,如果有中文虽然不会报错,但是运行页面不会出来。

2.kits
选择编译套件,如有多个,按需要选择即可。
3.details
默认创建窗口类名称可以自己定义。
base class(基类)包括:

        1.qwidget是所有窗口类的基类;

        2.qmainwindow是菜单窗口类;

        3.qdialog是对话框窗口类。qmainwindow、qdialog的父类是qwidget。
类名可以自定义也可以默认。
generate form(创建界面)勾选代表启动qt设计界面功能。即有一个初始页面,可以拖拽控件。如果不选择则使用代码编辑界面。

4.sumary
可添加版本控制系统(如:git,svn,vss),如不使用,默认 none 即可。

5.项目创建成功后,main.cpp的介绍

#include "mywidget.h"
#include //包含一个应用程序类的头文件
//main程序入口
//argc命令行变量的数量,argv命令行变量的数组
int main(int argc, char *argv[])
{
    //创建应用程序对象a,在qt中,应用程序对象有且仅有一个
    qapplication a(argc, argv);
    //自定义窗口对象 mywidget父类为qwidget
    mywidget w;
    //窗口对象默认不会显示,必须要调用show方法显示窗口
    w.show();
    //让应用程序对象a进入消息循环机制
    //让代码阻塞到这一行,一直捕获用户行为
    //让窗口不会一闪而过,只有点了窗口的×才会退出这个窗口(消息循坏)
    return a.exec();
}

其他:

translation
可以为项目创建一个翻译文件,将你的应用界面翻译成其它语言,不适用默认none即可。

build system
cmake很常用,功能强大,比如opencv、vtk。但语法繁杂。
qmake是针对辅助qt开发的,但也可以在非qt项目使用,特点是语法简单明了,功能简单。
qbs号称下一代构架工具,许多人追捧。

.pro文件的解释

qt     = core gui   // qt包含的模块
greaterthan(qt_major_version, 4): qt  = widgets   // 大于4版本以上 包含 widget模块
target = 01_fristproject  // 目标  生成.exe程序的名称(运行编译之后生成的.exe文件)
template = app   //模块  应用程序模块  application
sources  = mian.cpp\     // 源文件
        mywidget.cpp 
headers  = mywidget.h    //头文件

头文件 (.h文件)

头文件开头的是防止重复加载的,在新版编译器中部分功能可以用#program once代替,但是两者有一些不同,具体可以参考:#ifndef 与 #program once 的区别 

源文件(.cpp文件)

 

在界面中添加按钮

在qt助手中搜索pushbotton

文档中给出了一些该类的信息,比如需要的头文件,所属模块,父类、子类等等。

按钮常用api

  • 创建 qpushbutton * btn = new qpushbutton
  • 设置父亲  setparent(this)
  • 设置文本  settext(“文字”)
  • 设置位置  move(宽,高)
  • 重新指定窗口大小  resize
  • 设置窗口标题 setwindowtitle
  • 设置窗口固定大小 setfixedsize

mywidget.cpp

#include "mywidget.h"
#include  // 按钮控件的头文件
mywidget::mywidget(qwidget *parent)
    : qwidget(parent)
{
    // 创建一个按钮对象
    qpushbutton * btn = new qpushbutton;
    //btn->show(); // show以顶层方式弹出窗口
    // 让btn对象依赖在mywidget窗口中
    // this指向的就是当前对象的指针
    btn->setparent(this);
    // 显示文本
    btn->settext("第一个按钮");
    // 创建第二个按钮
    // 这种方式创建的按钮窗口是按照控件的大小创建窗口(比较小)
    qpushbutton * btn2 = new qpushbutton("第二个按钮",this);
    // 移动btn2按钮位置(如果没有移动的话,第二个按钮会覆盖第一个按钮,显示不出来)
    btn2->move(100,100);// 坐标
    // 重置窗口大小
    resize(600,400);
    // 设置窗口的标题
    setwindowtitle("第一个窗口");
    // 设置固定窗口大小(未设置前,窗口是可以拖拽改变窗口大小的)
    setfixedsize(600,400);
}
mywidget::~mywidget()
{
}

 对象树

特点:

      当创建的对象在堆区时候,如果指定的父亲是qobject派生下来的类或者qobject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中。

      一定程度上简化了内存回收机制.

      当父对象析构的时候,这个子对象列表中的所有对象都会被析构,当析构子对象的时候,会自动从父对象的子对象列表中删除。

qobject 的构造函数中会传入一个 parent 父对象指针,children() 函数返回 qobjectlist。即每一个 qobject 对象有且仅有一个父对象,但可以有很多个子对象。按照这种形式排列就会形成一个对象树的结构,最上层是父对象,下面是子对象,在再下面是孙子对象,以此类推。
 

在项目中新建一个文件

点中项目名称右键,选择add new

 然后点击完成即可。

pro文件中不用手动添加,已经自动添加过了。

mypushbutton.h

 mypushbutton.cpp

mywidget.cpp

 qt窗口坐标系

以左上角为原点(0,0),x向右增加,y向下增加。

对于嵌套窗口来说,其坐标是相对于父窗口来说的

网站地图