Qt5源码赏析
品读Qt5,领略C++之美!
ithewei
这个作者很懒,什么都没留下…
展开
-
QT之细节集锦
设置窗口透明度setWindowOpacity();这个方法只对具有Qt::Window窗口标识的窗口起作用,能够设置整个窗口的透明度,透过这个窗口可以看到其他的窗口设置控件背景色和透明度 setAutoFillBackground(true); QPalette pal = palette(); pal.setColor(QPalette::Background, Qt::b原创 2017-08-10 19:23:22 · 2016 阅读 · 0 评论 -
QT之OpenGL
介绍QT中提供了QOpenGLWidget来封装OpenGL流程,原先的QGLWidget已经被QOpenGLWidget取代。 QOpenGLWidget给出的接口更加简洁,方便使用,一般只需重写下面三个接口即可virtual void initializeGL();virtual void resizeGL(int w, int h);virtual void paintGL();ini原创 2017-08-15 12:18:12 · 1375 阅读 · 0 评论 -
QT之虚拟键盘
编译插件(带拼音输入法)qt虚拟键盘以插件的形式给出,源代码目录在qtvirtualkeyboard,工程为qtvirtualkeyboard.pro首先进入到qtvirtualkeyboard目录,使用如下qmake命令生成Makefile文件: qmake CONFIG+="lang-en_GB lang-zh_CN"在linux下直接使用make编译make install安装即可原创 2017-11-08 18:52:26 · 14996 阅读 · 21 评论 -
QT之QWebEngineView
从webkit到webengine自从Qt5.6后引入了QWebEngine,摒弃了原先的QWebkit,这是一款基于chrome浏览器内核引擎,Qt webenginewidgets模块中提供了QWebEngineView这个视图控件来很方便的加载和显示网页,仅需如下几行:QWebEngineView* webview = new QWebEngineView;webview->load(QUr原创 2017-08-10 17:47:46 · 23676 阅读 · 1 评论 -
Qt--多语言翻译
Qt使用lupdate工具导出ts文件来记录需要翻译的字本信息,经过翻译后,再使用lrelease工具生成qm文件,然后在程序中加载qm文件的方式来实现多语言。ts文件格式ts文件是xml格式的文件文件,格式如下所示<?xml version="1.0" encoding="utf-8"?><!DOCTYPE TS>&原创 2018-07-27 15:52:17 · 6355 阅读 · 2 评论 -
Qt--字符串类
std::stringc++标准库中提供了std::string这个字符串类,但功能真心不够用,比如简单的字符串和整型转换,还得借助atoi,itoa等c字符串函数,和浮点型相互转换更是没有。string并不是一个单独的容器,只是basic_string 模板类的一个typedef 而已,相对应的还有wstring, 在string 头文件定义如下:extern "C++" {typedef ba原创 2017-12-02 16:27:22 · 3769 阅读 · 3 评论 -
Qt--智能指针
C++不像JAVA那样提供了自动垃圾回收机制,内存管理上更加灵活高效,却也带来了内存泄漏的风险。C++程序员通常采用RAII(Resource Acquisition Is Initialization)机制来管理内存资源:在类的构造函数中申请资源,在析构函数中释放资源。我们必须保证malloc分配的内存最终能被free,new创建的对象能在正确的时机被delete,并且时刻警惕使用野指针导致的崩溃原创 2017-11-29 17:01:08 · 4888 阅读 · 0 评论 -
Qt--日志
Qt提供了qDebug、qWarning、qCritical、qFatal、qInfo等不同级别的日志记录函数qlogging.h中声明了一个日志处理函数typedef void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &);通过qInstallMessageHandler可以安装自己的日志处原创 2017-11-25 17:58:54 · 1527 阅读 · 0 评论 -
Qt--容器模板类
Qt中提供的容器模板类类似于STL,它提供了Java-style iterators and STL-style iterators两种风格的迭代器,此外还提供了foreach关键字。Container Classessequential containers:QVector<T> QVector的内存模型是预先分配好大小的连续数组,所以可以通过索引快速访问,但如果在头部或者中间插入删除需要大量原创 2017-11-24 11:58:06 · 1740 阅读 · 0 评论 -
Qt--XML
XML是一种可扩展的标签语言,常用于数据保存和交互。Qt中提供了几种方法可对xml进行解析,DOM、SAX还有core模块提供的QXmlStreamReader和QXmlStreamWrite。DOM是分析一个小型xml的选择,它将整个xml解析成一个对象树结构,我们只需要对解析结构遍历即可。 对于大型xml则使用QXmlStreamReader更加有速度和内存优势。对于一般应用程序,DOM更加简原创 2017-11-23 19:26:02 · 1130 阅读 · 0 评论 -
Qt--JSON
JSON是一种来自Javascript的对象数据的编码格式,现在被广泛用作互联网上的数据交换格式。json数据类型有bool、double、string、object、array、null json对象使用{key:value,…}格式保存 json数组以[]括起来表示Qt自然也提供了对json的读写支持 相关的类有#include <QJsonDocument>#include <QJso原创 2017-11-23 15:49:44 · 1481 阅读 · 0 评论 -
Qt--QSettings
在qt.conf一节中我们知道qt.conf是一个ini格式文件,Qt内部使用QSettings这个类来解析和保存qt.conf中的配置。先来看一个QSettings的使用范例:#include <QDebug>#include <QSettings>#include <QCoreApplication>int main(int argc, char* argv[]){ QCoreAp原创 2017-12-05 15:59:32 · 3139 阅读 · 0 评论 -
Qt--qt.conf
Qt5使用qt.conf来设置Qt的路径在qlibraryinfo.cpp文件中,我们可以发现这样一个类:struct QLibrarySettings{ QLibrarySettings(); void load(); QScopedPointer<QSettings> settings;}在QLibrarySettings构造函数中会调用load方法,load中会调用一原创 2017-11-14 10:52:10 · 12373 阅读 · 0 评论 -
Qt--QCoreApplication、QGuiApplication、QApplication
QCoreApplication、QGuiApplication、QApplication区别和联系:从继承关系来看,QApplication继承自QGuiApplication,QGuiApplication继承自QCoreApplication,所以它们的功能是逐步递增的。从所处模块来看,QCoreApplication定义在core模块中,为应用程序提供了一个非gui的事件循环;QGuiApp原创 2017-11-23 10:18:15 · 5774 阅读 · 1 评论 -
Qt--QObject
QObject上一节中我们讲了QObject是Qt中使用Meta-Object元对象模型或者说使用信号与槽机制,必须继承的根基类,一般面向对象语言都会有这么一个根基类,提供了语言的基础,那么Qt作为C++的扩展库,QObject作为Qt的根类,为我们提供了哪些功能呢?对象树在Qt的构造函数中,我们可以发现都带有一个QObject* parent=0的默认参数,这个parent就是用来指定父对象QOb原创 2017-11-22 12:12:39 · 2765 阅读 · 0 评论 -
Qt--QMetaObject
QMetaObject接口分析上一节中我们概述了Meta-Object Model的架构,它通过提供了一个QObject的基类,使用Q_OBJECT宏,这样moc编译器就会自动帮我们生成带有QMetaObject记录了元信息的源码。这节我们看下QMetaObject提供了哪些接口去获取或使用这些元信息上源代码:struct Q_CORE_EXPORT QMetaObject{ class原创 2017-11-15 10:58:42 · 8074 阅读 · 1 评论 -
Qt--Meta-Object Model
Meta_Object ModelQt meta-object系统基于三个方面:1、QObject提供一个基类,方便派生类使用meta-object系统的功能;2、Q_OBJECT宏,在类的声明体内激活meta-object功能,比如动态属性、信号、槽;3、Meta Object编译器(MOC),为每个QObject派生类生成代码,以支持meta-object功能。QObject定义了从一个QObj原创 2017-11-14 18:15:21 · 2156 阅读 · 0 评论 -
Qt--Q_GLOBAL_STATIC
我记得《Effective C++》中有这么一条:条款02 对于单纯常量,最好以const对象或enum替换#define;对于形似函数的宏,最好改用inline函数替换#define但是Qt中却将define玩的出神入化,宏定义和泛型编程的结合更是令我大开眼见。本节以Q_GLOBAL_STATIC为例来赏析下Qt中的宏艺术。Q_GLOBAL_STATIC(TYPE,NAME)宏用来声明定义一个全原创 2017-12-04 18:22:42 · 5175 阅读 · 0 评论 -
Qt--宏
宏的知识#define <宏名> (<参数表>) <宏体>#undef <宏名>#ifdef <宏名> ...#else ...#endif//define中的三个特殊符号:#,##,#@#define STRCAT(x,y) x##y //连接x和y成一个字符串#define TOCHAR(x) #@x //给x加上单引号#define TOSTR(x) #x //给原创 2017-11-14 12:15:49 · 5287 阅读 · 0 评论 -
Qt--QVariant
QVariantQVariant行为类似于C/C++的union, 但在Qt中比union强大很多, QVariant内置支持所有QMetaType::Type里声明的类型如:int,QString,QFont等,甚至QList<QVariant>,QMap<QString, QVariant>等组成的任意复杂类型.。简单的说QVariant可以存储任意数据类型,表现的类似弱语言,如JS中的var。原创 2017-12-04 11:23:36 · 3730 阅读 · 0 评论 -
Qt--数据类型
Qt数据类型定义在qglobal.h头文件中定义如下:typedef signed char qint8; /* 8 bit signed */typedef unsigned char quint8; /* 8 bit unsigned */typedef short qint16; /* 16 bit signed */typedef u原创 2017-11-13 18:52:22 · 4087 阅读 · 1 评论 -
Qt--core模块概述
QtCore模块是所有其它Qt模块的基础,包含以下核心功能:Qt Data Types:数据类型Qt Object Model:对象模型(包括元对象模型、属性系统、信号与槽机制、对象树)Input/Output Classes:I/O读写Threading and Concurrent Programming:多线程和并发编程QCoreApplication:应用程序类Event Sys原创 2017-11-13 18:37:36 · 4098 阅读 · 0 评论 -
Qt--模块划分
模块化设计所谓软件的模块划分是指在软件设计过程中,为了能够对系统开发流程进行管理,保证系统的稳定性以及后期的可维护性,从而对软件开发按照一定的准则进行模块的划分。根据模块来进行系统开发,可提高系统的开发进度,明确系统的需求,保证系统的稳定性。软件设计过程中通过对软件进行模块划分可以达到以下的好处:使程序实现的逻辑更加清晰,可读性强;使多人合作开发的分工更加明确,容易控制;能充分利用可以重用的代原创 2017-11-13 14:44:22 · 5717 阅读 · 0 评论 -
Qt--编译与安装
工欲善其事,必先利其器。学习任何框架,下载安装总是第一步。Qt因为开发源码,所以有直接安装和源码安装两种方式,建议是第一次先直接安装,如果后面需要重新编译特定的模块,或者需要静态库,再额外的编译源码。至于IDE,我推荐使用Qt自带的QtCreator。下载Qt的官网地址是https://www.qt.io/Qt release版本下载地址http://download.qt.io/official_原创 2017-11-13 09:47:15 · 18900 阅读 · 1 评论 -
Qt--序
品读Qt,领略C++之美Qt为何物一句话说:Qt 是一个跨平台的C++图形用户界面应用程序开发框架。何以选Qtc++作为一门OOP语言,在其标准库中,却连基础的一些类库(比如时间日期类,文件目录类…)都没有提供,这对于开发来说极为不利,你要么自己去封装类(这就是造轮子的过程了,虽然可以学到很多,但是自己封装一来效率低下,费时费力,二来没经受时间和项目考验,不能确保安全稳定,三来封装的接口和编程风格各原创 2017-11-11 16:45:58 · 2110 阅读 · 0 评论