- 博客(151)
- 收藏
- 关注
原创 模型、视图、代理(自定义-1)
1,自定义模型#ifndef MYMODEL_H#define MYMODEL_H#include <QAbstractItemModel>#include <QModelIndex>#include <QDebug>/*** * 自定义表格视图 */class MyModel : public QAbstractItemModel{public: int col,rw; //表格模型的列数和行数 QList<QVari
2021-05-16 18:57:16
342
原创 数据库
1,新建一个工程,设计 UI界面2,创建数据库Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); // 创建数据库 db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("myDB.db"); // 打开数据库 if(!db
2021-05-16 17:46:10
392
1
原创 QJson
#include "widget.h"#include <QApplication>#include <QCoreApplication>#include <QJsonDocument>#include <QJsonArray>#include <QJsonObject>#include <QJsonParseError>#include <QJsonValue>#include <QString&.
2021-05-13 20:15:36
539
原创 QT进程间通信
<<Qt Remote Object(QtRO)实现进程间通信>>概述:这是Qt5.9以后官方推出来的新模块Qt官方推出的这个新模块是基于Socket来封装的,兼容LPC和RPCLPC即Local Process Communication,而RPC是指Remote Process Communication,两者都属于IPCQtRO能够工作于这两种不同的模式:如果用于LPC,则QtRO使用QLocalSocket;如果是用于RPC,则使用QTcpSocket。
2021-05-06 23:00:37
1083
原创 cap:8 d-pointer
d-pointer 模式!/* d-pointer 模式!*/#include <iostream>using namespace std;// 矩阵主类class Matrix;// 矩阵数据类class MatrixData { // 引用计数 int refCnt; double data[3][3]; friend class Matrix;public: MatrixData() { cout &.
2021-05-01 22:49:58
145
原创 cap-7:QTIO(QDataStream读/写自定义类型)
struct ColorText{ ColorText() {} QString m_text; QColor m_color;};QDataStream& operator <<(QDataStream &dataStream, ColorText &colorText){ dataStream << colorText.m_color << colorText.m_text; return d.
2021-05-01 16:20:19
532
原创 cap-7:C++IO(char_trait)
定义大小写不敏感的 ci_trait,并用 ci_trait 构造 ci_string!/* 定义大小写不敏感的 ci_trait,并用 ci_trait 构造 ci_string!*/#include<iostream>#include <string>using namespace std;struct ci_char_traits : public char_traits<char> { // 覆盖 eq 函数 static bool e
2021-05-01 10:59:34
156
原创 QStackedLayout
#include <QApplication>#include <QWidget>#include <QStackedLayout>#include <QPushButton>#include <QComboBox>int main(int argc, char *argv[]){ QApplication a(argc, argv); QWidget w; //主窗口 w.resize(400,400);.
2021-04-20 14:30:45
197
原创 QT窗口及其widget类
QObject 是所有 Qt 对象的基类,QPaintDevie 是所有可绘制对象的基类 部件和窗口的概念不一样 Qt::WindowType 对部件的类型进行描述,比如该部件是否是窗口,是否是子窗口,是否是对话框,是否拥有菜单栏等 1,typedef QFlags<WindowType> WindowFlags 2,enum WindowType {Widget,Window,Dialog,Sheet,...,WindowType_Mask} 3,QFlags 是 Qt 中内置的模板
2021-04-19 21:30:02
344
原创 parseExtensionData
parseExtensionData(SubExtensionHandler)#ifndef SUBEXTENSIONHANDLER#define SUBEXTENSIONHANDLER#include <QDataStream>#include <QVariantMap>#include "qtezglobaldefs.h"namespace Common {struct SubExtensionHandler{ SubExtensionHand.
2021-04-19 15:44:57
140
原创 事件
事件处理方式#include <QApplication>#include<QWidget>#include<QObject>#include <iostream>using namespace std;class A:public QWidget{public: bool event(QEvent* e); //事件处理方式 1:重写虚函数 QObject::event() void mousePressEvent(Q..
2021-04-13 11:32:01
171
原创 属性系统
属性基础c.h文件:#ifndef C_H#define C_H#include<QObject>class A:public QObject{ Q_OBJECTpublic: /*通常,若属性名为 a,则相应的读取函数通常命名为 geta,设置函数命名为 seta,本例并未使用这种命名 规则*/ //声明一个类型为 int,名称为 a 的属性,并使用函数 f 读取属性值,使用函数 g 设置属性值。 Q_PROPE
2021-04-12 13:46:17
312
原创 元对象
使用反射机制获取类对象成员函数的信息a.h文件://头文件 a.h 的内容(文件读者自行创建)#ifndef A_H //要使用元对象系统,需在头文件中定义类。#define A_H#include<QObject> //因为要使用 QObject 类,为此需要包含此头文件class A:public QObject{ Q_OBJECT //启动元对象系统,必须声明此宏public: //定义 2 个构造函数、1 个信号、3 个函数。 Q_INVOK
2021-04-12 09:56:25
367
原创 动态Qml(四-创建和销毁对象2)
上一节演示了怎么动态创建(在我们需要的时候就创建)对象,但是对象本身是个 QML 文件,这节演示怎么通过文本创建对象!代码:import QtQuick 2.9import QtQuick.Window 2.2Window { visible: true id:root width: 640 height: 480 title: qsTr("Hello World") function createItem() { Q
2021-04-10 17:58:16
367
原创 动态Qml(三-创建和销毁对象)
加载一块QML代码时,它首先会被解释执行为一个组件。 这一步包含了加载依赖和验证代码。 QML的来源可以是本地文件,Qt资源文件,或者一个指定的URL网络地址——这意味着加载时间不确定 组件创建之后,它的状态可以用来跟踪它的状态属性。 可以使用的状态值包括:组件为空 (Component.NULL) 组件加载中(Component.Loading) 组件可用 (Component.Ready) 组件错误(Component.Error)从空(NULL)状态到加载中(Loading)再到可用
2021-04-10 17:49:39
1587
原创 动态Qml(二-间接链接)
Connection 可以连接一个目标元素任意数量的信号 通过改变 target 可以在不同的时间监控不同的元素 注意当多个信号被处理调用所有操作时,执行的顺序是未定义的 当创建一个连接元素(Connection element)未指定目标属性时,默认的属性是父对象 这意味着需要显式的设置NULL来避免捕获来自父对象的信号,直到 target 被设置说白了,就是 Connection 的用法!代码:import QtQuick 2.9import QtQuick.Window 2.
2021-04-10 16:14:36
438
原创 动态Qml(一-动态加载组件)
Loader element 作为一个占位符项用来加载 Item Item 的加载通过资源属性(source property)或者资源组件(sourceCompontent)属性控制 加载元素项通过给定的URL链接加载 Item ,然后实例化一个组件 Loader element 的大小基于被加载项的大小而定,反之亦然。 如果Loader element定义了大小,或者通过锚定(anchoring) 定义了宽度和高度,被加载项将会被设置为 Loader element 的大小 如果 Loader
2021-04-10 15:24:38
1421
原创 Multimedia(五-播放列表)
作者说 Qt 5 multimedia 没有提供视频列表接口,但是好像提供了!import QtQuick 2.9import QtQuick.Window 2.2import QtMultimedia 5.6Window { visible: true width: 1024 height: 600 title: qsTr("Hello World") Rectangle { id: root anchors.fil
2021-04-10 13:56:53
164
原创 Multimedia(四-视频流)
其实就是照相机了!import QtQuick 2.9import QtQuick.Window 2.2import QtMultimedia 5.6Window { visible: true width: 1024 height: 600 title: qsTr("Hello World") Item { anchors.fill: parent VideoOutput {
2021-04-10 13:36:17
192
原创 Multimedia(三-声音)
当播放声音效果时,从请求播放到真实响应播放的响应时间非常重要一import QtQuick 2.9import QtQuick.Window 2.2import QtMultimedia 5.0Window { visible: true width: 770 height: 480 title: qsTr("Hello World") Item { id: root anchors.fill: parent
2021-04-10 11:58:10
114
原创 Multimedia(二:一些参数)
上一节实现了简单的媒体播放,这节在上一节的基础上完善一下!当播放媒体时可以通过MediaPlayer元素的volume属性来控制音量 duration与position属性可以用来创建一个进度条。如果seekable属性为true,当拨动进度条时可以更新position属性 mediaObject属性的notifyInterval属性改变可以设置每个position之间更新的毫秒数,增加用户界面的平滑度。 使用status属性来监听播放器,这个属性是一个枚举,它枚举了播放器可能出现的状态:Med
2021-04-10 11:14:15
268
原创 Multimedia(一:初识)
MediaPlayer 元素有一个source属性指向需要播放的媒体。 当媒体源被绑定后,简单的调用play 函数就可以开始播放 需要配置一个 VideoOutput元素。 MediaPlayer播放通过source属性与视频输出绑定代码:import QtQuick 2.9import QtQuick.Window 2.2import QtMultimedia 5.0Window { visible: true width: 640 height: 480
2021-04-10 10:10:59
172
原创 粒子模拟(七-粒子组2)
上一节我们实现了火箭/烟雾/重力/摩擦等效果,这节我们实现火箭“死亡”之后爆炸为烟花!1,GroupGoal允许我们改变一组粒子变化到另一组粒子(当进入 GroupGoal 区域后) // 使用groupGoal属性, // 我们设置目标组改变为我们之前定义的 // 'explosion' 粒子组 GroupGoal { id: rocketChanger
2021-04-09 12:59:55
131
原创 粒子模拟(六-粒子组1)
这节我们通过前面学过的粒子相关知识,加上粒子组的用法,实现一个有意思的 Demo第一步:创建界面import QtQuick 2.9import QtQuick.Window 2.2import QtQuick.Particles 2.0Window { visible: true width: 680 height: 440 title: qsTr("Rocket..") Item{ anchors.fill: parent
2021-04-09 10:53:59
116
原创 粒子模拟(五-粒子控制)
粒子由粒子发射器发出。在粒子发射出后,发射器无法再改变粒子。粒子控制器允许你控制发射后的粒子参数。控制器的每个类型使用不同的方法来影响粒子:生命周期(Age)- 修改粒子的生命周期 吸引(Attractor)- 吸引粒子朝向指定点 摩擦(Friction)- 按当前粒子速度成正比减慢运动 重力(Gravity)- 设置一个角度的加速度 紊流(Turbulence)- 强制基于噪声图像方式的流动 漂移(Wander)- 随机变化的轨迹 组目标(GroupGoal)- 改变一组粒子群的状态
2021-04-09 08:51:19
510
原创 粒子模拟(四-粒子项)
到目前为止我们只使用了基于粒子画笔的图像来实现粒子可视化Qt也提供了一些其它的粒子画笔:粒子项(ItemParticle):基于粒子画笔的代理 自定义粒子(CustomParticle):基于粒子画笔的着色器粒子项 ItemParticle{ id:particle system: particleSystem delegate: itemDelegate
2021-04-09 08:51:07
133
原创 粒子模拟(三-粒子方向2)
点方向上一节我们使用了“角度方向”来改变粒子运动的方向和速度,这节我们试试“点方向”“点方向”是 x 和 y 共同决定粒子运动的方向 如果我们想要粒子朝着45度数方向运动,可以指定 x 和 y 相同的值! yVariation 指定了在 Y 轴上下变化的角度范围(例子在上一节的代码上修改以下代码) velocity: PointDirection { x: 100 y: 0
2021-04-08 17:45:59
245
原创 粒子模拟(二-粒子方向)
有多种可用矢量空间用来定有多种方法定义粒子的速度或加速度:角度方向(AngleDirection)- 使用角度的方向变化。 点方向(PointDirection)- 使用x,y组件组成的方向变化。 目标方向(TargetDirection)- 朝着目标点的方向变化。使用 AngleDirection 改变粒子的速度和方向代码:import QtQuick 2.9import QtQuick.Window 2.2import QtQuick.Particles 2.0Windo
2021-04-08 17:23:17
397
原创 粒子模拟(一-简单的粒子模拟和一些参数)
粒子模拟的机制有点复杂,暂时还没法理解透彻,所以 “粒子模拟”纯粹是一个学习的过程!简单的例子模拟简单例子模拟需要做的任务:绑定所有元素到一个模拟的粒子系统(ParticleSystem)。 一个向系统发射粒子的发射器(Emitter)。 一个ParticlePainter派生元素,用来实现粒子的可视化。import QtQuick 2.9import QtQuick.Window 2.2import QtQuick.Particles 2.0Window { visib
2021-04-08 16:11:48
1153
原创 Canvas(四-绘图程序)
创建四个颜色盒子,然后将这四个盒子装在 Row 定位器中,Row 定位器保存一个变量,此变量保存用户通过点击这四个盒子决定的颜色值!ColorSquare组件:import QtQuick 2.5Rectangle { id: root width: 48; height: 48 color: "green" signal clicked property bool active: false border.color: active? "#66
2021-04-08 15:07:45
163
原创 Canvas(三-关于绘图的一些技巧2)
坐标变换:就是改变画布的原点坐标了import QtQuick 2.9import QtQuick.Window 2.2Window { visible: true width: 240 height: 120 title: qsTr("Hello World") Item { anchors.fill: parent Canvas{ id:root anchors.fi
2021-04-08 14:24:42
180
原创 Canvas(二-关于绘图的一些技巧1)
画矩形的接口:// 填充矩形// ctx.fillRect(20,20,80,80)// 清楚矩形区域// ctx.clearRect(30,30,60,60)// 无填充的矩形// ctx.strokeRect(20,20,40,40)渐变色:注意:要注意渐变色的范围的定义方式!var gradient = ctx.createLinearGradient(100,0,100,200)gradient.addColorStop(0.0,"blue")gradient.ad
2021-04-08 10:54:53
156
原创 Canvas(一-QML绘图基本概念)
画布元素(canvas element)的基本思想是使用一个2D对象来渲染路径。这个2D 对象包括了必要的绘图函数!画布元素(canvas element)充当绘制画布。2D对象支持画笔,填充,渐变,文本和绘制路径创建命令。画一个简单的填充矩形:获取 2d 对象的代码:var ctx = getContext("2d")渲染路径的代码:// 线条宽度为 4ctx.lineWidth = 4// 画笔样式为蓝色ctx.strokeStyle = "blue"// 填充风格我
2021-04-08 09:37:10
572
原创 MVD(五-路径视图PathView)
PathView创建了一个可以让子项沿着任意路径移动的视图 沿着相同的路径,使用缩放(scale),透明(opacity)等元素可以更加详细的控制过程 当使用PathView时,你必须定义一个代理和一个路径。在这些之上,PathView本身也可以自定义一些属性的区间 通常会使用pathItemCount属性,它控制了一次可见的子项总数 preferredHighLightBegin属性控制了高亮区间 preferredHighlightEnd与highlightRangeMode控制了当前项怎样沿
2021-04-07 21:54:23
433
原创 MVD(四-形变的代理)
在下面的例子中,当点击链表项时,链表项都会展开填充整个链表视图 (ListView)。额外的间隔区域被用于添加更多的信息,这种机制使用一个状态来控制当一个链表项展开时,代理项都能输入expanded(展开)状态,在这种状态下一些属性被改变需要注意的点:1,模型、视图、代理:模型负责产生数据>>// 链表视图数据来源 ListModel { id: planets ListElement {..
2021-04-07 17:28:53
147
原创 MVD(三-视图加入动画)
为了方便使用,QML视图为每个代理绑定了两个信号,onAdd和onRemove。使用动画连接它们,可以方便创建识别哪些内容被添加或删除的动画import QtQuick 2.9import QtQuick.Window 2.2Window { visible: true width: 640 height: 480 title: qsTr("Hello World") // 主界面 Rectangle { width: p
2021-04-07 15:19:57
248
原创 MVD(二-动态视图)
ListViewimport QtQuick 2.9import QtQuick.Window 2.2Window { visible: true width: 640 height: 480 title: qsTr("Hello World") Item { id: root Rectangle{ width: 80 height: 300
2021-04-07 11:17:56
212
原创 MVD(一-Model/View之Repeater)
分离数据与显示的基础模型 Repeater代码:import QtQuick 2.9import QtQuick.Window 2.2Window { visible: true width: 640 height: 480 title: qsTr("Hello World") // 定位器 Column{ spacing: 10 x:20 y:20 Repeater{
2021-04-07 10:36:18
265
原创 Animation(七-给状态的改变加过渡)
一系列的过渡能够被加入任何元素,一个过渡由状态的改变触发执行。 可以使用属性的from:和to:来定义状态改变的指定过渡。这两个属性就像一个过滤器,当过滤器为true时,过渡生效。 也可以使用“”来表示任何状态。例如from:""; to:"*"表示从任一状态到另一个任一状态的默认值,这意味着过渡用于每个状态的切换代码: // 加入过渡 transitions: [ Transition { from: "st
2021-04-07 09:35:21
119
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人