zoukankan      html  css  js  c++  java
  • Qt的环境与工具、信号与槽

    一、Qt简介

    上一篇博客有详细介绍 ~

    二、Qt环境与工具

    1、工具
    • a、Qt助手:里面详细说明了Qt框架中的每一个类、函数、宏等,是开发的必备工具,在终端可以使用assistant打开
    • b、构建器:负责把一个目录下的源码文件、头文件构建成一个Qt工程,并且自动生成Makefile文件
    • c、Qt设计器:以画图的方式来进行设计界面,设计出的界面是没有功能的,如果需要完成相应的功能,还要与代码结合(界面文件可以转换成源码)
    • d、Qt界面编译器:负责把.ui界面文件,生成对应的代码
    • e、Qt创造器:(Qt creator集成开发环境:集合了编辑器、助手、构建器、设计器、编译器)
    2、头文件和库

    Qt框架的头文件存储在/usr/include/qt4,一般以Qt开头结尾无.h
    Qt框架中的共享库存储在/usr/lib/qt4/imports目录中,,一帮以libQt开头

    三、第一个Qt程序

    1、编写源码
    • a、创建目录,每个Qt工程都要有一个单独的目录
    • b、编写入口
      //创建应用程序对象
      QApplication app(argc,argv);
      //创建标签对象,此控件专门用来显示文字
      QLabel lab("hello world");
      //显示标签,几乎所有的控件默认都是隐藏的
      lab.show();
      //把程序的运算交给Qt(监控事件、等待用户操作)
      return app.exec();
    2、生成工程文件

    qmake -project ->目录名.pro

    3、生成Makefile文件

    qmake ->makefile

    4、编译

    Qt程序在编译时语法检查非常严格,错误信息也很多

    四、查阅Qt助手

    • 1、打开Qt助手(assistant命令),使用索引、搜索找到对应的控件类、函数、宏。Inherits:有哪些父类
    • 2、头文件,注意使用此控件时要包含什么头文件,一般情况下是类名
    • 3、Properties:具有保护属性的成员变量
    • 4、Public Functions:具有公开属性的成员函数,部分功能函数可能在父类中,当需要的成员函数找不到时,可以去父类中看看
    • 5、Reimplemented Public Functions:可以重写的具有公有属性的成员函数
    • 6、Public Slots:具有公开属性的槽函数,首先它是具有某些功能的成员,但它可以与信号绑定,不光可以被信号调用,也可以被直接调用
    • 7、Signals:它们是以函数形式存在的,但它们并不实现出来,可以用emit显示的触发
    • 8、Reimplemented Protected Functions:可以重写的具有保护属性的成员函数
    • 9、Detailed Description:使用注意事项
    • 10、其它:静态成员、静态成员函数、相关的宏

    五、中文处理

    1、不同的字符编码:由于历史原因、地区、国家、文化的不同,所使用的文字编码是不同的

    英语国家:ASCII,128个字符,
    中国大陆:GBK2312(windows下常用的字符编码,每个汉字2字节)
    港台地区:BIG5

    2、统一字符编码

    国际标准化组织想设计出一套全世界通用的字符编码(Unicode)
    版本:
    UTF-2:双字节统一字符集
    UTF-4:四字节统一字符集
    UTF-8:用一到四字节表示一个Unicode字符
    UTF-16:用二到四字节表示一个Unicode字符
    UTF-32:用四字节表示一个Unicode字符

    3、内外有别:

    内部编码:
    Qt应用程序中所有的控件默认使用的是UTF-16编码
    外部编码:
    操作系统所使用的编码(ubuntu默认使用的是UTF-8编码)

    4、解决Qt乱码问题

    Qt4.8默认的是UTF-16编码,因此必须手动设置后才能正确显示中文
    Qt5.0之后默认的是UTF-8编码

    5、在程序最开始设计内部编码
    • Qt4.8:
      QTextCodec codec = QTextCodec::codecForName("GBK");//情况1
      QTextCodec::setCodecForTr(codec);
      QTextCodec::setCodecForLocale(codec);
      QTextCodec::setCodecForCStrings(codec);

      QTextCodec
      codec = QTextCodec::codecForName("UTF-8");//情况2
      QTextCodec::setCodecForTr(codec);
      QTextCodec::setCodecForLocale(codec);
      QTextCodec::setCodecForCStrings(codec);
      +Qt5.0之后:
      QTextCodec *codec = QTextCodec::codecForName("UTF-8");
      QTextCodec::setCodecForLocale(codec);
      注意:当出现灵异错误时,可以把Qt所有生成的文件删除,再重新构建工程

    六、信号与槽

    信号:就是以函数形式存在的一种信号
    槽:是一种特殊的函数,如果不配合信号,可以当作普通函数使用

    信号和槽函数必须经常连接才能协同工作
    connect(负责发送信号的对象指针)
    信号函数签名:SIGNAL(函数名及参数)
    接受信号的对象指针
    槽函数的函数名签名:SLOT(函数名及参数)

    七、自定义信号和槽

    • 1、在自定义的类中定义信号和槽函数一定要单独写一个头文件
    • 2、自定义的类必须要继承QObject类
    • 3、在类的开头必须要有宏:Q_OBJECT
    • 4、定义信号时前面要加关键字,信号以函数形式存在,但不需要实现
      signals:
      +5、定义槽函数时要加public slots:关键字,可以显示调用,也可以与信号连接,由信号触发调用
    • 6、信号由关键字emit触发,可以带参数也可以不带参数
      如果想让信号给槽函数发送数据,它们的参数格式必须一样

    八、控件与容器

    组成窗口界面的小工具:QLabel,QTextEdit,QPushButton
    容器用来存放控件的类
    QMainWindow:主窗口容器,由标题栏、菜单栏、工具栏、状态栏组成



  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/qsz805611492/p/9602805.html
Copyright © 2011-2022 走看看