Qt
ithewei
这个作者很懒,什么都没留下…
展开
-
QT之QML控件篇
QT quick中提供了很多的使用控件widget,下面介绍几种常用的。这部分介绍基本是参照QtCretator提供的帮助文档,一定要学会使用,不明白的去查找帮助。Item基本上所有的可是控件的基类都是Item,上节说过了QML的格式是以property:value的方式书写,所以了解一个控件主要的就是了解它提供了哪些属性properties和方法methods,属性又可以分为默认default属性原创 2017-07-10 12:47:51 · 3916 阅读 · 1 评论 -
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--QCoreApplication、QGuiApplication、QApplication
QCoreApplication、QGuiApplication、QApplication区别和联系:从继承关系来看,QApplication继承自QGuiApplication,QGuiApplication继承自QCoreApplication,所以它们的功能是逐步递增的。从所处模块来看,QCoreApplication定义在core模块中,为应用程序提供了一个非gui的事件循环;QGuiApp原创 2017-11-23 10:18:15 · 5779 阅读 · 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 · 8076 阅读 · 1 评论 -
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 · 12388 阅读 · 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 · 4089 阅读 · 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 · 4099 阅读 · 0 评论 -
Qt--编译与安装
工欲善其事,必先利其器。学习任何框架,下载安装总是第一步。Qt因为开发源码,所以有直接安装和源码安装两种方式,建议是第一次先直接安装,如果后面需要重新编译特定的模块,或者需要静态库,再额外的编译源码。至于IDE,我推荐使用Qt自带的QtCreator。下载Qt的官网地址是https://www.qt.io/Qt release版本下载地址http://download.qt.io/official_原创 2017-11-13 09:47:15 · 18931 阅读 · 1 评论 -
Qt--容器模板类
Qt中提供的容器模板类类似于STL,它提供了Java-style iterators and STL-style iterators两种风格的迭代器,此外还提供了foreach关键字。Container Classessequential containers:QVector<T> QVector的内存模型是预先分配好大小的连续数组,所以可以通过索引快速访问,但如果在头部或者中间插入删除需要大量原创 2017-11-24 11:58:06 · 1741 阅读 · 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 · 1529 阅读 · 0 评论 -
Qt实战--基于OpenCV的VideoCapture实现视频引擎类
HVideoCapture上一节中我们给出了播放引擎接口类HVideoPlayer,下面我们给出基于OpenCV的VideoCapture类实现的播放引擎实现类HVideoCaptureHVideoCapture首先播放引擎类从媒体源中获取帧,解码,push到缓存区等工作我们放到另外一个线程中做,以免阻塞GUI线程,为此HVideoPlayer多重继承自HVideoP...原创 2018-09-03 12:34:26 · 5029 阅读 · 3 评论 -
Qt实战--视频引擎接口类HVideoPlayer
HVideoPlayer接口功能定义代码HMediaHFrameHFrameBufHBuf、HRingBufHVideoPlayer接口功能设置媒体源HMedia开始start、停止stop、暂停pause、继续resume视频帧HFrame的push、pop定义代码#ifndef HVIDEOPLAYER_H#define HV...原创 2018-09-03 11:31:38 · 3348 阅读 · 0 评论 -
Qt--多语言翻译
Qt使用lupdate工具导出ts文件来记录需要翻译的字本信息,经过翻译后,再使用lrelease工具生成qm文件,然后在程序中加载qm文件的方式来实现多语言。ts文件格式ts文件是xml格式的文件文件,格式如下所示&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;!DOCTYPE TS&gt;&原创 2018-07-27 15:52:17 · 6358 阅读 · 2 评论 -
Qt实战--自定义播放控件类HVideoWidget
HVideoWidgetinitUIinitConnectupdateUIHVideoTitlebar、HVideoToolbarHVideoWndHGLWidgetHVideoWidgetHVideoWidget用来显示、控制视频,包括打开、关闭媒体、开始、停止、暂停播放等功能public slots: void open(HMedia...原创 2018-07-05 12:35:55 · 5184 阅读 · 2 评论 -
Qt实战--主窗口布局
QMainWindow构造函数initUIinitMenuCentralWidgetHMultiViewHVideoWidgetQMainWindowMainWindow类我们一般选择直接继承自QMainWindow,因为QMainWindow已经向我们提供了一个常用的应用程序主窗口布局,包括QMenuBar菜单栏、QToolBar工具栏、QStatusB...原创 2018-06-29 12:07:08 · 8287 阅读 · 0 评论 -
Qt实战--从main开始
Qt作为C/C++框架库,入口函数自然还是main,不像MFC那样隐藏了main,搞得人云里雾里。 我们就从main开始,开启Qt之旅。main函数源码int main(int argc, char *argv[]){ qInstallMessageHandler(myLogHandler); qInfo("-------------------app start...原创 2018-06-21 19:52:19 · 5827 阅读 · 0 评论 -
Qt实战--多画面播放器项目
多画面播放器需求分析做一个类似VLC的播放器,能播放本地媒体文件、捕获设备、网络流;界面要求多画面监控网格,可自由切换多画面风格;概要设计使用Qt实现界面;使用OpenCV的VideoCapture获取视频帧;使用OpenGL渲染视频帧;详细设计界面设计截图编码实现编码部分我们放在后面章节分解,先贴出完整的项目github地址,欢迎clone和...原创 2018-06-21 18:00:33 · 14378 阅读 · 68 评论 -
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,领略C++之美Qt为何物一句话说:Qt 是一个跨平台的C++图形用户界面应用程序开发框架。何以选Qtc++作为一门OOP语言,在其标准库中,却连基础的一些类库(比如时间日期类,文件目录类…)都没有提供,这对于开发来说极为不利,你要么自己去封装类(这就是造轮子的过程了,虽然可以学到很多,但是自己封装一来效率低下,费时费力,二来没经受时间和项目考验,不能确保安全稳定,三来封装的接口和编程风格各原创 2017-11-11 16:45:58 · 2110 阅读 · 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 · 5179 阅读 · 0 评论 -
ubuntu12.04安装Qt5.6
Qt版本选择ubuntu12.04默认安装的是qt4,如果我们想使用qt5的新功能(比如Qt quick),就得自己下载安装qt5了,使用apt-get install qtcreator你会发现安装的还是qt4,所以只能自己去下载qt5的版本,下载链接http://download.qt.io/official_releases/qt/,最初我选择了一个最新的qt5.7以上版本,安装后发现编译程序原创 2017-08-10 18:50:52 · 5116 阅读 · 4 评论 -
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 · 1378 阅读 · 0 评论 -
QT之QML类型篇
最近因为项目需要,决定使用QT作为linux下的界面库开发一个转码设备的界面。因为直接和yuv数据打交道,所以需要使用OpenGL利用GPU硬件加速渲染画面,最初使用的SDL,后来又改写成glut,再后来因为要添加各种按钮、播放条、嵌入网页、动画过渡效果等需求,glut显然不能胜任了,gtk也有点过时了,决定采用QT去改写,也方便日后各种需求扩展。QML即QT Markup Language,取名和原创 2017-07-07 17:58:47 · 2683 阅读 · 1 评论 -
ubuntu12.04升级gcc至4.8
gcc 4.8.1 是第一个完全支持C++11 的编译器,Windows上可以安装mingw版的,在sourceforge 上有下载,安装也比较方便。在Linux上安装的话需要首先安装一些依赖库。在Ubuntu12.04 lts默认安装的是gcc4.6.3,其实该版本也支持一些c++11的特性,可以通过增加“-std=c++0x” 编译选项来使用这些特性,但是对多线程库的支持较差,gcc 4.8.1原创 2017-07-14 18:23:25 · 2341 阅读 · 0 评论 -
QT之QML与C++混合编程
使用qml文件我们能够快速构建UI界面,大大减少了C++代码编写界面的难度,但一些底层的编程还是需要使用C++来完成,这时我们就需要QML与C++混合编程了,一般就是使用QML 快速构建界面, C++ 实现非界面的业务逻辑和复杂运算。QML的基本类型比如Item,实际上在C++中的实现就是QQuickItem,这意味着QML中是可以使用C++类和对象的,而C++也是可以识别qml构建的对象并控制它的原创 2017-07-13 10:35:37 · 2051 阅读 · 0 评论 -
QT之布局篇
QT提供很多种布局的方式,非常灵活,下面介绍的是Qt quick提供几种布局。 分别是:anchors ,锚布局Row ,行布局Column ,列布局Grid ,表格布局Flow ,流式布局anchors锚布局是使用Item元素提供的属性anchors来实现的,它是一种相对布局,相对于其他元素的位置来确定自己的位置,基准线有水平中心(horizontalCenter)、垂直中心(ver原创 2017-07-11 11:02:03 · 1585 阅读 · 0 评论 -
QT之自定义组件和动态加载
自定义组件在qml文件中自定义组件可以分为全局自定义组件和内嵌自定义组件全局自定义组件定义在一个单独的qml文件中,文件名即组件名(这点是c++程序员开始比较迷惑的地方,实际上java的文件名和类名也是如此),首字母默认会转化为大写,类似Item、Text等。下面自定义一个组件,每秒会自己变幻背景色,我们称之为闪光灯FlashLight,保存为FlashLight.qmlimport QtQuick原创 2017-07-10 19:09:29 · 3260 阅读 · 0 评论 -
QT之鼠标、键盘、定时器
用简单的例子说话import QtQuick 2.7import QtQuick.Controls 2.0Rectangle { visible: true; width: 640; height: 480; color: "#DCDCDC" MouseArea { anchors.fill: parent onClicked:原创 2017-07-10 17:06:04 · 902 阅读 · 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 · 15008 阅读 · 21 评论 -
QT之细节集锦
设置窗口透明度setWindowOpacity();这个方法只对具有Qt::Window窗口标识的窗口起作用,能够设置整个窗口的透明度,透过这个窗口可以看到其他的窗口设置控件背景色和透明度 setAutoFillBackground(true); QPalette pal = palette(); pal.setColor(QPalette::Background, Qt::b原创 2017-08-10 19:23:22 · 2018 阅读 · 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 · 3731 阅读 · 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--字符串类
std::stringc++标准库中提供了std::string这个字符串类,但功能真心不够用,比如简单的字符串和整型转换,还得借助atoi,itoa等c字符串函数,和浮点型相互转换更是没有。string并不是一个单独的容器,只是basic_string 模板类的一个typedef 而已,相对应的还有wstring, 在string 头文件定义如下:extern "C++" {typedef ba原创 2017-12-02 16:27:22 · 3770 阅读 · 3 评论 -
Qt--智能指针
C++不像JAVA那样提供了自动垃圾回收机制,内存管理上更加灵活高效,却也带来了内存泄漏的风险。C++程序员通常采用RAII(Resource Acquisition Is Initialization)机制来管理内存资源:在类的构造函数中申请资源,在析构函数中释放资源。我们必须保证malloc分配的内存最终能被free,new创建的对象能在正确的时机被delete,并且时刻警惕使用野指针导致的崩溃原创 2017-11-29 17:01:08 · 4890 阅读 · 0 评论 -
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 · 2157 阅读 · 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 · 5288 阅读 · 0 评论 -
Qt--模块划分
模块化设计所谓软件的模块划分是指在软件设计过程中,为了能够对系统开发流程进行管理,保证系统的稳定性以及后期的可维护性,从而对软件开发按照一定的准则进行模块的划分。根据模块来进行系统开发,可提高系统的开发进度,明确系统的需求,保证系统的稳定性。软件设计过程中通过对软件进行模块划分可以达到以下的好处:使程序实现的逻辑更加清晰,可读性强;使多人合作开发的分工更加明确,容易控制;能充分利用可以重用的代原创 2017-11-13 14:44:22 · 5717 阅读 · 0 评论 -
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 · 23680 阅读 · 1 评论 -
Qt实战--基于FFmpeg的视频引擎实现类
FFmpeg搞音视频开发的基本都会接触到FFmpeg这个库,支持几乎所有的音视频编解码格式。相对于上节我们用OpenCV实现的获取视频帧,FFmpeg对底层的控制粒度更细,有利于我们后续开发,精准控制编解码格式,获取码流信息,实现进度调整等;FFmpeg编译或下载教程网上很多,在此就不介绍了。在此主要贴出一张解码流程图:HFFPlayer#include "hffplayer.h"#...原创 2018-09-28 18:44:51 · 4191 阅读 · 9 评论