Qt信号槽的一些事

注:此文是站在Qt5的角度说的,对于Qt4部分是不适用的。

1.先说Qt信号槽的几种连接方式和执行方式。

1)Qt信号槽给出了五种连接方式:

Qt::AutoConnection 0 自动连接:默认的方式。信号发出的线程和糟的对象在一个线程的时候相当于:DirectConnection, 如果是在不同线程,则相当于QueuedConnection
Qt::DirectConnection 1 直接连接:相当于直接调用槽函数,但是当信号发出的线程和槽的对象不再一个线程的时候,则槽函数是在发出的信号中执行的。
Qt::QueuedConnection 2 队列连接:内部通过postEvent实现的。不是实时调用的,槽函数永远在槽函数对象所在的线程中执行。如果信号参数是引用类型,则会另外复制一份的。线程安全的。
Qt::BlockingQueuedConnection 3 阻塞连接:此连接方式只能用于信号发出的线程(一般是先好对象的线程) 和 槽函数的对象不再一个线程中才能用。通过信号量+postEvent实现的。不是实时调用的,槽函数永远在槽函数对象所在的线程中执行。但是发出信号后,当前线程会阻塞,等待槽函数执行完毕后才继续执行。
Qt::UniqueConnection 0x80 防止重复连接。如果当前信号和槽已经连接过了,就不再连接了。

继续阅读“Qt信号槽的一些事”

QLib7z:Qt对7z格式解压的封装

QLib7z还是上次做一个项目的时候需要压缩和解压文件,考虑过7z,和QRunInfo一起从从Qt-Installer-Framework中提取的。继承提取源的协议:LGPL。后来上面决定用的是zip格式,也就没用到这个,我也就仅仅写个例子放在那里了。

前两天有人群里问7z解压,我就随口推荐了这个,使用中有的api他没有弄清楚,我就又拉去过来从源码里翻了翻api, 继续阅读“QLib7z:Qt对7z格式解压的封装”

Qt线程使用杂谈

注:此文不涉及Qt线程使用的具体代码例子,如果是怎么使用Qt线程,见下面链接。

现在写一个项目并行和多线程几乎是必用的。在Qt中最多的是用QThread,只是QThread有两种用法,继承与QObject::moveToThread函数。在群里有人郁闷Qthread的用法,此文写下个人简单的见解。

首先简单说下QThread的这两种用法: 继续阅读“Qt线程使用杂谈”

代码笔记:Qt无边框和目录的一些处理

做个代码笔记,下次直接复制就用了,不用再找了。我这个记忆力,也记不住几天、、、

1.无边框拖动:

1)设置无边框:

this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint);
//设置无边框,第一个参数是设置无边框。第二个参数是允许任务栏按钮右键菜单,第三个参数是允许最小化与还原。

继续阅读“代码笔记:Qt无边框和目录的一些处理”

QRunInfo: Qt 系统运行信息获取的一些简单封装

QRunInfo是从Qt-Installer-Framework中提取的一些系统验证和运行信息获取的一些Qt封装。我只是为部分接口整理和组织下代码。代码基于LGPL2.1和LGPL3.0协议。

QRunInfo 地址:https://github.com/dushibaiyu/QRunInfo

其中涉及Qt的core模块,gui和widget模块(主要是AdminAuthorization)有用QWidget。 继续阅读“QRunInfo: Qt 系统运行信息获取的一些简单封装”

Qt父子对象内存管理实现简析

用Qt大家都知道Qt有一套自己的内存管理机制:父子对象管理机制。适用于所有继承于QObject的类。即在一个类中指定他的父对象,可以用void QObject::setParent(QObject * parent)函数指定,也可以在构造时传入参数,一般继承自QObject的类,Qt-c自动生成的类模板的构造函数都是explicit 类名(QObject *parent = 0);这个parent就是你可以制定的父对象。当一个对象删除之后,会自动删除他的所有的子对象,这样你就可以有很多new,但是只有一个delete。(注:这个父子对象关系和继承的父子类是不一样的,而且可以说基本没关系的。)

下面我们就扒下Qt的源码,找下它的实现。 继续阅读“Qt父子对象内存管理实现简析”

两个基于C++/Qt的开源WEB框架

1.tufao

 项目地址:

 主页:

介绍:

Tufão is a web framework for C++ that makes use of Qt's object communication system (signals & slots).

Tufão是一个C + +的Web框架,使用Qt的对象的通信系统(信号与槽)。

Features: 特性

  • High performance standalone server 高性能独立服务器
  • Cross-plataform support 跨平台支持
  • Good documentation 良好的文档
  • Support modern HTTP features 支持现代的HTTP特性
  • Persistent streams 持续流
  • Chunked entities 分块实体
  • 100-continue status
  • WebSocket
  • HTTPS support 支持HTPPS
  • Flexible request router 灵活的路由请求
  • Static file server with support for conditional requests, partial download and automatic mime detection 静态文件服务器与条件请求支持,部分下载和自动检测
  • Plugin-based server to allow change the running code without restart the application 服务器基于插件机制,支持更改运行代码(?)而不用重启程序。
  • Flexible and secure session support 灵活和安全的会话支持
  • QtCreator's plugin to allow create new applications rapidly  QtCreator的插件,以便快速创建新的应用程序
  • Lots of tests 经过了大量的测试
  • Timeout support 超时支持
  • C++11

It uses Ryan Dahl's HTTP parser to provide good performance. 采用Ryan Dahl's HTTP分析器以提供更好的性能

You can generate documentation from the source code using Doxygen. The documentation will be put on the doc folder in the html and tex formats. There is also experimental support for Qt compressed help files.

您可以使用Doxygen的源代码生成文档。该文件将在html和tex的格式被提上doc文件夹。也有对Qt的压缩帮助文件的实验性支持。

继续阅读“两个基于C++/Qt的开源WEB框架”