QT程序设计
文章平均质量分 51
Dezeming
研究方向:数学原理,GPU加速技术,数据结构与算法,机器学习,深度学习神经网络,3D可视化,计算机图形学,图像处理,计算机视觉,Qt程序设计,C++编程
曾学习和研究过:Java,51,stm32,msp430等单片机,嵌入式ARM,DSP,模拟/数字电路,树莓派
展开
-
QT程序设计系列
在QT界面开发过程中,本人总结了很多以往写过的程序和例子,并以博客的形式整理下来。此为目录:第一部分:QT与XML语言读写本系列讲述如何从零开始一点一点构建XML文件解析程序,并结合实际例子去实现一个XML语言读写程序XML语言数据读写理解1XML语言数据读写理解2XML语言数据读写理解3XML语言数据读写理解4XML语言数据读写理解5XML语言数据读写理解6X...原创 2020-03-27 11:07:20 · 6724 阅读 · 0 评论 -
基于QT的文件管理软件编写 系列 引言
我决定做一个在windows上使用的基于QT的文件管理软件。项目由来:我们在本机保存东西的时候,只保存一份是不保险的,所以我们需要保存好几份。但是随着文件数量增多,我们想把一个文件夹更新到另一个备份文件夹,这就会带来很多不便之处,例如,我们只想更新变动过的文件,而不是要全部都更新。所以基于一些特点,我决定开发一个简易的稳定性比较强的文件管理软件,用于平时手动保存备份管理文件。本项目大致...原创 2019-12-28 10:29:09 · 6552 阅读 · 0 评论 -
QT传输函数控件设计1 引子
这又是一个系列的开头。说实话本来我想先写写关于QT三维物体显示的功能的,因为后面也会遇到。但是鉴于有些朋友表示急需使用关于渲染的传输函数控件,这里我就先把这个传输函数控件搞定,然后再来写一下怎么实现小三维模型显示和交互。老规矩:各位务必放心,本人开坑必填,预计一周内填完此坑。各位注意了,我之前写的关于xml文件读写,以及QT图形图像显示的系列内容都是为这个来做铺垫。以前讲过的这两个系列...原创 2019-11-02 20:05:17 · 6198 阅读 · 1 评论 -
Windows11的VTK安装:VS201x+Qt5/Qt6 +VTK7.1/VTK9.2.6
需要提前安装好VS2017和VS2019和Qt VS开发控件以及Qt VS-addin。首先下载VTK,需要下载源码和data:然后这两个文件同时解压,会自动解压到一个文件夹里。原创 2023-07-22 01:00:25 · 862 阅读 · 0 评论 -
Qt5和Qt6在线安装的问题
这是因为在Qt在线安装时,这里使用的 qt-unified-windows-x64-4.6.0-online.exe 里面的选项只有Qt Creator可选。在线安装我的梯子怎么都安装不快,如果只是时间长也行啊,但是经常蹦出来一个“下载xxx无响应”,你还得去盯着它,不然就给你自动退出了,着实有些烦人(得下载14个小时)。解决方法是找更低版本的在线安装器。比如我找到的4.4.2版本就可以安装Qt Creator 10.0.0,这样就成功安装了。我这里报错的原因是找不到Qt Creator 11.0.0,原创 2023-07-20 22:50:02 · 523 阅读 · 0 评论 -
Qt 窗口设置WA_DeleteOnClose时报错:Invalid address specified to RtlValidateHeap
m_DisplayMainWindow是定义为指针,但DisplayMainWindow中有许多非指针控件,且在构造函数中初始化为了DisplayMainWindow的子对象,那么如果此时再设置WA_DeleteOnClose,退出时就会报错。最近需要让Qt窗口关闭时自动释放内存并销毁窗口对象,默认情况下,当多个窗口打开时,关闭一个它并不会自动释放内存。当关闭以后,再退出程序时,会再自动执行析构函数。但是因为析构函数在关闭控件时已经调用过一次了,所以重复释放就会报错。原创 2023-06-09 14:36:29 · 462 阅读 · 0 评论 -
打开软件时报错:This application failed to start because no Ot platform plugin could beinitialized.
我打开美图秀秀时突然报错:This application failed to start because no Qt platform plugin could beinitialized. Reinstalling the application may fix this problem.原创 2023-01-11 19:34:50 · 3293 阅读 · 1 评论 -
基于QT的文件管理软件编写 系列 1
首先在VS里面新建Qt工程(不知道如何新建的去看一下网上的博客)。这里的工程是要用代码编写的,不使用Qt界面设计师(界面设计师不够灵活,而且生成的代码比较死板)。然后在工程里添加我们的调试器类。为了完整性我们再重新粘贴一下调试器类。MyDebug.h#ifndef __MYDEBUG_H__#define __MYDEBUG_H__#include"debugtext.hp...原创 2019-12-28 16:22:13 · 7299 阅读 · 0 评论 -
Qt多线程2
我们可以认为,DebugText对象是一个临界资源,即一次只能有一个线程来使用。临界区资源必须要互斥访问,不然就会出现各种Bug。使用QMutex类的相关功能可以保证一次只有一个线程使用该代码段。我们在DebugText类里面加入下面这句声明:QMutex *mutexInDebugText;然后再构造函数中:mutexInDebugText = new QMutex;...原创 2019-11-27 20:07:54 · 6060 阅读 · 0 评论 -
Qt多线程1
Qt的多线程对于设计并行程序来说很有帮助,但是多线程因为其固有的一些特性,会导致程序会出现各种隐患,尤其是类设计不好的时候尤为严重。这里我们将详细介绍一下Qt的多线程技术,包括如何制作一个线程安全的类。首先我们先写一个简单的例子:首先,我们再次使用一个类DebugText ,该类继承自DebugWidget类:#pragma once#ifndef _DEBUGWIDGE...原创 2019-11-27 17:51:14 · 6144 阅读 · 1 评论 -
QT三维图形4
我们先把基本的功能写上:#include <QGroupBox>#include "qDoubleSlider.hpp"#include <qlabel.h>#include <qgridlayout.h>class My3DCentralPoint : public QGroupBox { Q_OBJECTpublic: My3DCent...原创 2019-11-10 17:48:20 · 7361 阅读 · 0 评论 -
QT三维图形3
我们现在要设计一个滑动条,可以通过滑动来实现立方体位置和边框长度的改变。因为立方体的长宽都是小数,普通的进度条难以实现,这里我们封装一个double类型的进度条:class QDoubleSlider : public QSlider然后在里面定义函数: void setRange(double Min, double Max); void setMinimum(double...原创 2019-11-10 17:01:36 · 8133 阅读 · 0 评论 -
QT三维图形2
我们再定义一下鼠标事件。首先定义两个全局变量,以及判断鼠标是否按压下去的量:int lastPosX, lastPosY;int currentPosX, currentPosY;int pressFlag = 0;void My3DDisplayWidget::mousePressEvent(QMouseEvent *event) { QPoint qf = event-&...原创 2019-11-10 12:28:55 · 6512 阅读 · 0 评论 -
QT三维图形1
先说一下我们想要做什么,以及这个小的系列会讲些什么。首先这个系列很小,我觉得大概也就几节罢了,不可能给大家把三维Opengl讲透,所以读者应该是有点基础的。在做体渲染的时候,我们有时候只需要渲染里面的一部分内容,也就是说我们不需要把整个体空间都渲染出来,这个时候,我们就应该建立一个窗口,里面有一个可以移动的矩形体来调节我们想要渲染的内容,注意要是矩形的。在我们已有的工程上,建立一个Do...原创 2019-11-10 12:19:07 · 7306 阅读 · 2 评论 -
QT传输函数控件设计13 大结局
虽然感觉像是过了很久,其实时间也没有几天。我是从10月27号开始写这个系列的。从27号到11月8号,总共也就才十三天而已。本来我觉得这个比较复杂的控件要想实现可能得一个月,从解析XML文件,到图元的设计,再到实现具体细节,因为本人主业还是做算法的,很少会直接使用Qt界面编程,所以对我来说该项目也算是一个挑战。该控件的实现,到目前大概3千行代码,里面还有很多功能尚待发掘,目前我们就只先实现这一个简单...原创 2019-11-08 19:28:39 · 6152 阅读 · 0 评论 -
QT传输函数控件设计12 自定义信号和槽
现在我们这么思考一下:我们已经在每个NodeGraphicsItem里面定义了一个指针,指向了每个原始数据的NodeXmlItem,我们可以在itemChange函数中坐标修改的时候对其进行修改,但是问题来了,我们修改了值,但是只有当更新update的时候才会重新显示位置。我们在鼠标松开事件中使用了update,但是如果鼠标不松开,我们只是单纯地移动小圆点,能不能把实时移动的信息发给上层呢?...原创 2019-11-08 19:05:32 · 6520 阅读 · 1 评论 -
QT传输函数控件设计11 包含小圆点的图形项2
然后我们写一下void TsfunGraphicsItem::itemsUpdate()函数,其实首先我们应该清空NodeGraItem列表:for(int i = 0;i < NdGraItemlist.count();i++){ scene()->removeItem(NdGraItemlist[i]); delete NdGraItemlist[i]; } N...原创 2019-11-08 18:10:34 · 6151 阅读 · 1 评论 -
QT传输函数控件设计10 包含小圆点的图形项
在NodeGraphicsItem小圆点类里面加入新的成员: double lastPos; double currentPos; double nextPos; double opacity; void setMargin(int x,int y,int w,int h); int xStart; int yStart; i...原创 2019-11-08 17:50:20 · 6249 阅读 · 0 评论 -
QT传输函数控件设计9 初步设计视口类
我们先按照之前的布局设计中,先把 TsfunDockWidget 以及 TsfunWidget 对象设计完。注意 DockWidget 里的中心窗体设置。然后定义继承自QWidget的类TsfunWidget类以及继承自QGraphicsView类的TsfunView类,并把这个类实例化加到TsfunWidget类里面,为了玩玩布局我们也可以在TsfunWidget的布局里再加个按键(没啥用,就是...原创 2019-11-08 15:38:28 · 6148 阅读 · 0 评论 -
QT传输函数控件设计8 设计小圆点
首先看一下小圆点:如图,左图上有很多小圆点,这些小圆点是由蓝色的中心和红边构成。点击小圆点的时候,小圆点的红边会消失,松开鼠标红边又会出现。我们首先要把这些小圆点能够显示在QGraphicsView上面,还记得之前讲过的图形项嘛?每个小圆点就是一个图形项。现在我们就开始设计图形项类。因为这是圆的,所以我们就继承一个QGraphicsEllipse椭圆类。#ifndef __Nod...原创 2019-11-08 00:13:08 · 6664 阅读 · 0 评论 -
QT传输函数控件设计7 边界和布局规划
我们先定义一个关于边界的类。因为我们在设计的时候,需要明确很多因素:1.我们假设把整个针对传输函数来设计的控件都放在一个QDockWidget上,那么首先我们先构思一个DockWidget这些设计以后真正设计的时候还会讲,这里提到只是为了方便说明布局。2.在DockWidget上,我们需要定义很多控件,这些控件中的一个是之前我们看到的一个大的内部窗体结构,以及其他内部窗体结构...原创 2019-11-07 23:40:02 · 6170 阅读 · 1 评论 -
QT传输函数控件设计6 设计Dock窗体结构
我们新建一个QT类,叫MyTransferFuncDockWidget,继承自QDockWidget。然后在继承mainWindow的类中声明MyTransferFuncDockWidget *mytfDockWidget;然后在其构造函数中new一个实体。因为我们有许多功能,多个功能作为一个功能集体,我们把相同功能的控件都定义在一个GroupBox里面,首先我们先定义一个关于节...原创 2019-11-06 10:23:30 · 6179 阅读 · 0 评论 -
QT传输函数控件设计5 显示体渲染效果
初期为了简单,我们就直接在open()函数下面直接继续写。为了保证没有读到文件就不处理下面的显示,我们就在上面定义一个flag,只有在文件数量>20的时候,flag = 1; 然后接着写: if (flag == 1) { }我们接下来的功能都是在这里面实现的。注意先包含一堆头文件:#include <vtkImageData.h>#include ...原创 2019-11-03 15:48:31 · 6404 阅读 · 0 评论 -
QT传输函数控件设计4 接着进行融合
既上节之后,我们要定义一个打开文件的菜单,用于打开我们想用来可视化的文件:在头文件类中声明:pravite: QAction *action; QToolBar *mainToolBar; QStatusBar *statusBar; QMenuBar *menuBar; QMenu *menu; void setup();然后写实体:(注意这里面有些东西是从以前...原创 2019-11-03 12:29:32 · 6129 阅读 · 0 评论 -
QT传输函数控件设计3 QVTKWidget和QT图形界面的融合
当然我们的项目不可能真的是零基础的,如果你连什么是QDockWidget,连怎么写个信号和槽都不清楚,那就去学QT吧,反正又不难,期待我们再会。之前是因为xml和图形项场景之类的我觉得可能大家接触比较少,而且网上的资料特别是xml文件解析的资料不太全面,所以我才单独花了一周多的时间写了二十多节来讲解的,这里关于QWidget的常见的各种控件的用法不再做单独解释(反正很简单,有点经验一看就知道啥...原创 2019-11-03 11:46:34 · 7248 阅读 · 0 评论 -
QT传输函数控件设计2 体渲染和VTK
程序我就先直接放这里:#include<vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL2)VTK_MODULE_INIT(vtkInteractionStyle);VTK_MODULE_INIT(vtkRenderingFreeType);VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)...原创 2019-11-02 21:33:18 · 6474 阅读 · 1 评论 -
QT图形显示和处理8
本节代码多处为了方便简洁,应该是用了些《QT creater 快速入门第三版 霍亚飞著》的一些代码,在此感谢。毕竟本人时间也是有限,没有必要为了“全都是自己写的”而故意把代码修改到六亲不认的程度。(尽管有些项目的代码已经改到六亲不认的地步了)。以前自己玩QT4的时候也是学了这本书,之后自己做的项目里很多代码都是直接在已经写了一些代码的文件上进行修改的。学习是一边学一边封装成自己的工具,然后再使用。...原创 2019-11-02 19:28:29 · 6518 阅读 · 0 评论 -
QT图形显示和处理7
再贴一段代码:注意先把上面的代码屏蔽掉://坐标系实验 QGraphicsScene *scene = new QGraphicsScene; MyGraphicsItem *item = new MyGraphicsItem; scene->addItem(item); //这个偏移是根据父类的偏移,而不是子类的, //如果不加后面的 item->setParentI...原创 2019-11-02 18:26:55 · 6620 阅读 · 0 评论 -
QT图形显示和处理6
我们先暂且不再深究场景和view的坐标系,先研究一下如何定义一个自己的图形项,首先定义一个Qt类:#ifndef MYGraphicsITEM_H#define MYGraphicsITEM_H#include <QGraphicsItem>class MyGraphicsItem : public QGraphicsItem{public: MyGraphics...原创 2019-11-02 17:00:33 · 6356 阅读 · 0 评论 -
QT图形显示和处理5
有了之前的一些基础,现在开始讲图形项和场景。前面我花了整整两节来详细讲述了绘图的坐标系,大家一定要好好理解一下。现在我们介绍场景和图元。我换一种讲解思路,讲完图元以后就开始直接讲场景坐标系统。所谓图形项,比如你玩的坦克大战游戏,这个坦克可以随意运动,它整体就是一个图形项,它可以发出子弹,每个子弹也是图形项。我们可以定义一个图形项,然后把它放在场景里,并控制它的运动。我们实现如下代码:(...原创 2019-11-02 15:20:34 · 6540 阅读 · 0 评论 -
QT图形显示和处理4
QT还可以使用2D画图功能来显示图像,绘制文字,实现绘制路径,也可以显示gif图像,就是所谓的动画效果。这些因为和我们最后要实现的东西关系也不是很大,所以就不详细讲述了。在这里简单再说一下双缓冲机制:双缓冲就是设置两个缓冲区,先在一个上画,画好以后直接传给另一个,然后另一个负责显示。在Opengl中,双缓冲是这样:先把内容画在一个缓冲区上,然后两个缓冲区进行交换,然后再画另一个缓冲区,然后两者...原创 2019-11-01 19:08:08 · 6229 阅读 · 0 评论 -
QT图形显示和处理3 坐标系统(重点)
我们先从最简单的例子入手。 QPainter painter(this); QPen pen(Qt::green,5,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin); painter.setPen(pen); painter.drawLine(QPoint(0,0), QPoint(150, 150)); painter.setWindow(-wi...原创 2019-10-31 23:26:28 · 6985 阅读 · 0 评论 -
QT图形显示和处理2 坐标系统(重点)
上一节我们讲了基本的绘图,这一节将重点讲述什么是二维坐标系。大多数博客和书对QT的坐标讲解非常粗浅,两个非常重要的函数setWindow和setViewport都没有说清楚。这一节将重点讲一下坐标系统。先上一段代码:QPainter painter(this);QPen pen(Qt::green,5,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin...原创 2019-10-31 22:44:36 · 6829 阅读 · 0 评论 -
QT图形显示和处理1
首先我们必须要了解关于QT图形图像的基本知识:QT的绘图系统是由QPainter,QPainterDevice和QPainterEngine来构成的。其中QPainter是用来绘制的类,QPainterDevice是提供绘制设备的类,而QPainterEngine是用来连接QPainter和QPainterDevice的,即在画画这个功能和绘画工具之间提供一个桥梁。既然QPainter是用...原创 2019-10-31 17:38:02 · 6733 阅读 · 0 评论 -
XML语言数据读写理解16
下面我们介入一个应用场景:也就是我们xml文件的应用:体渲染传输函数。首先看一下效果:这是从软件ExposureRender上截的图来显示的,左边的面板用来调节传输函数,右边来显示出效果。该程序的渲染是完全在GPU上实现的,我们因为重点在于制作和学习xml语言结构,所以就不使用GPU制作渲染引擎了,而是在VTK上显示。现在我们首先来思考一下左边。左边其实是一个qt画板,可以在上...原创 2019-10-31 09:38:02 · 6067 阅读 · 0 评论 -
XML语言数据读写理解15
现在该实现删除函数了。删除的方法是:给定第几个节点的索引(比如索引2),我们把第三个(0 1 2)节点删除。结合上一章程序:TsfunGroup tg;tg.readXML("ss");//tg.showXML(); NodeTS nts(0.01923,0.1023,QColor(123,32,67));tg.addNodeToItem("maxMode",nts);tg....原创 2019-10-30 23:52:02 · 6077 阅读 · 0 评论 -
XML语言数据读写理解14
现在我们写一个自由添加节点的程序。内容还是承接上面几章节。首先我们先从最底层的NodeTS类入手,建造一个构造函数:NodeTS::NodeTS(double argNormalizedIntensity, double argOpacity, QColor argEmission, QObject * parent):CommonXML(parent){ this->Norma...原创 2019-10-30 23:08:52 · 6031 阅读 · 0 评论 -
XML语言数据读写理解13
最后就是在tsfunGroup类里面定义函数:void writeXML();因为不再需要什么返回值了。源码如下:void TsfunGroup::writeXML() { writeFile.clear(); QDomProcessingInstruction instruction = writeFile.createProcessingInstruction("xml",...原创 2019-10-30 20:57:29 · 6088 阅读 · 0 评论 -
XML语言数据读写理解12
首先我们从最底层的Nodets开始写起,然后逐步往上层实现。在类里面定义一个函数:QDomElement writeNodets(QDomDocument &doc);注意参数是QDomDocument,因为你要靠这个参数来创建节点元素。下面把函数附上:QDomElement NodeTS::writeNodets(QDomDocument &doc){...原创 2019-10-30 20:30:31 · 6027 阅读 · 0 评论 -
简易的QT输出调试器2
我们升级一下调试器,让它变成单例模式,所有调试都打印在一个窗口上:#pragma once#ifndef _DEBUGWIDGET_H__#define _DEBUGWIDGET_H__#include <QWidget>#include <qtextedit.h>#include <qlayout.h>class DebugWidget : ...原创 2019-10-30 18:48:04 · 6087 阅读 · 0 评论