- 博客(53)
- 资源 (1)
- 收藏
- 关注
原创 QT写文件多出四字节问题
问题:QDataStream 使用"<<"方法写入数据,有多余的字符,如16进制表示为“0000 001a”解决:QDataStream 使用writeRawData()方法写入数据能够避免多余字节的产生QFile file(“file.txt”);file.open(QIODevice::WriteOnly);QDataStream out(&file); // we will serialize the data into the file//原代码//使用操作符输入
2020-12-09 11:12:44
601
原创 在对DCM格式图像进行显示时,根据窗宽窗位进行归一化
window_center=1200 #窗位window_width=400 #窗宽win_min = (2window_center - window_width)/2.0 + 0.5win_max = (2window_center + window_width)/2.0 + 0.5dFactor = 255.0/(win_max - win_min)nNumPixels=rawData.shape[0]for i in range(nNumPixels):pixel_val = raw
2020-10-26 13:55:35
836
1
原创 C++11的tuple类型
tupletuple是一种数据类型,叫做元组,它类似于我们平时使用的struct结构体,可以将不同的数据类型放入到tuple中。和tuple相关的函数1.make_tuple:它是用来创建一个tuple的auto tup1 = std::make_tuple("Hello Wrold!",'a',3.14,0);上面的代码就是创建了一个tuple<const char*, char, double, int>类型的元组。从这里我们就可以看出可以在tuple中存储不同的数据类型。2.
2020-07-28 09:32:34
677
原创 ITK踩坑之旅(1)ITK的编译与安装(VS2015)
**一:准备工作**1:首先要下载ITKhttp://www.itk.org/ITK/resources/software.html我使用的版本是4.13.2各种版本操作都基本差不多2:下载CMAKEhttp://www.cmake.org/cmake/resources/software.html我是用的版本是3.11.3二:接下来开始进行编译1:首先在C盘或者D盘新建一个...
2020-03-16 18:47:49
1446
2
原创 QT中LineEdit输入限制
qt的三种验证类:1。输入int类型QValidator *validator=new QIntValidator(100,999,this);QLineEdit *edit=new QLineEdit(this);edit->setValidator(validator);也可以表示成QLineEdit *edit=new QLineEdit(this);edit->s...
2020-03-11 09:34:42
878
原创 关于Qt中中文乱码的问题
有时候我们会再使用Qt的时候遇到这样的问题就是中文显示出来是乱码解决方法:1:加上头文件#include然后写 QTextCodec *codec = QTextCodec::codecForName(“GBK”);在需要中文显示中文的时候加上codec->toUnicode(“测试”);这时显示的就是正常的中文了。2:这个方法可能对某些人会有用就是在要显示中文时加上...
2020-03-06 16:07:09
219
原创 Qt学习 文件对话框与目录对话框
文件对话框顾名思义,是用来选择文件的 QFileDialog::getopenFileName(this,"选择一个文件", 默认路径);通过QFileDialog::getopenFileNames(this,"选择一个文件", 默认路径);我们还可以选择多个文件,但是这时候我们如果选择的是目录的话是没有办法进行选择的。所以我们就要用到目录对话框QFileDialog::ge...
2020-02-28 09:58:02
784
原创 Qt学习(6)文件操作
在Qt中使用QFile对文件进行读写操作QFile file(path 文件路径);读文件1:file.open(文件打开方式); 例如QIODevice::readOnly只读方式打开2:全部读取 file.readAll() 按行读 file.readLine() file.atend()判断是否读到文件尾3:将读入的数据放入QByteArray array中可以用ar...
2020-02-20 10:30:43
1000
原创 Qt学习(5)Qt中的事件
1 Qt中的事件1.1 鼠标事件1.2 鼠标进入事件 enterEvent1.3 鼠标离开事件 leaveEvent1.4 鼠标按下 mousePressEvent ( QMouseEvent *ev)1.5 鼠标释放 mouseReleaseEvent1.6 鼠标移动 mouseMoveEvent1.7 ev->x() x坐标 ev->y() y坐标...
2020-02-20 10:14:33
677
原创 Qt学习(4)控件
1:按钮组1.1:QPushButton 常用按钮1.2:QToolButton 工具按钮 可以用来显示图片 显示文字修改风格 toolButtonStyle 例如凸起风格 autoRaise1.3:radioButton 单选按钮 默认选项设置 ui->rBtnMan->setChecked(true);1.4: checkbox多选按钮,监听状态,2 选中 1 ...
2020-02-20 09:54:17
279
2
原创 Qt学习 对ini文件进行读写操作
首先介绍一下界面界面中第一行我创建了选择文件的按钮 后面跟着一个显示文件路径的LineEdit 还有读写文件的按钮下面分别是int文件中的一些数据格式 左边是label 右边是LineEditui界面创建好以后下面是widget.h的代码#ifndef WIDGET_H#define WIDGET_H#include <QWidget>namespace U...
2020-02-19 16:10:18
1247
原创 Qt学习(3)对话框
Qt中的对话框分为:模态对话框和非模态对话框。模态对话框:不可以对其他窗口进行操作,是阻塞的。非模态对话框:可以对其他窗口进行操作。模态对话框的创建:QDialog dlg(this);dlg.exec();非模态对话框的创建:防止对话框一闪而过 创建到堆区QDialog *dlg = new QDialog(this);dlg->show();dlg->setA...
2020-02-18 09:25:35
160
原创 Qt学习(2)菜单栏和工具栏等
我们知道,在创建Qt项目时有三个类供我们选择,一个是Widget就是空窗口,一个是QMainWindow就是带菜单栏的窗口,另一个是Dialog也就是对话框。在我们选择QMainWindow后我们经常会创建菜单栏及工具栏等等1:菜单栏菜单栏最多只能有一个1.1:创建菜单栏 QMenuBar *bar = MenuBar();这时菜单栏虽然被创建出来,但是却并不会显示在主窗口中,我们要调用...
2020-02-17 18:47:34
892
原创 Qt学习(1)信号和槽
信号和槽以我自己的理解来说,信号和槽就是一个响应机制,我们提前将信号和槽连接起来,当信号被触发时,槽函数就被调用。举个例子来说,就相当于你听到自己肚子叫了,你就知道你饿了,所以就去吃饭,而肚子叫就可以看作一个信号,去吃饭就可以看成与其相连的槽函数。1:信号和槽的连接接函数:connect2:函数参数2.1:参数1 信号的发送者2.2:参数2 发送的信号(函数地址)2.3:参数3 信号的...
2020-02-17 17:35:51
259
原创 关于TeamViewer的下载安装登录过程(记录)
1:关于TeamViewer的下载在网上搜索TeamViewer,找到自己想要的版本进行下载即可。2:关于TeamViewer的登录主要记录登录所遇到的问题(1)提前注册TeamViewer账号,因为我的账号是公司已经帮我注册好的,所以省略这一步;(2)打开TeamViewer,输入账号密码进行登录,这时会弹出一个对话框,让你进邮件进行验证,验证时有一个选项,是选则是否信任此设备或IP。...
2020-02-11 19:14:02
822
原创 Linux学习笔记(socket网络编程)
socket概念在TCP/IP协议中,“IP地址+TCP或者UDP端口号”卫衣表示网络通讯中的一个进程,“IP地址+端口号”就称为socket,socket也是一个描述符。在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成。下面说一声socket编程的步骤:服务器端:1.创建socket:int socket(int domain,int typ...
2019-10-29 17:09:46
170
原创 Linux学习笔记(线程池)
线程池的概念:线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。线程池的工作机制:在线程池的编程模式下,任务是提交给整个线程池,而不是直接提交给某个线程,线程池在拿到任务后,...
2019-10-23 16:06:52
125
原创 Linux学习笔记(数据库)
MySql–三种注释写法需要特别注意-- 这种注释后面要加一个空格#DELETE FROM SeatInformation/*DELETE FROM SeatInformation */– DELETE FROM SeatInformation数据库中的约束主键约束primary key外键约束foreign key默认值约束defaultcheck约束unique约束数据库...
2019-10-16 17:48:15
251
原创 Linux学习笔记(管道)
管道的概念管道是一种两个进程见进行单向通信的机制,因为管道只能对数据进行单向传递,所以管道又称为半双工管道。管道是Linux由Unix继承而来的IPC形式之一。管道分为无名管道与命名管道。管道的特点:1:只能在有亲缘关系的进程之间进行通信(也就是在父子进程之间通信)2:单向通信一个读端,一个写端,如果要双向通信就要建立两个管道3:接收数据流,与数据格式无关4:一般而言,进程退出,管道...
2019-10-15 17:53:32
236
原创 Linux学习笔记(进程间通信)
进程间通信的概念(IPC)进程间通信Linux下的多个进程间的通信机制叫做IPC,它是多个进程之间进行相互沟通的一种方法。通过进程间通信可以实现不同进程之间传播和交换信息。进程间通信的目的1.数据传输2.资源共享3.一个进程需要向另一个或一组进程发送消息,通知它或它们发生了某种事件4.进程控制进程间通信的方式在Linux下有多个进程间通信的方法:半双工管道、FIFO(命名管道)、...
2019-10-15 16:49:06
156
原创 Linux学习笔记(孤儿进程与僵尸进程)
在Unix/Linux中一般情况下,子进程是由父进程通过fork函数创建的。但是子进程的结束和父进程的运行时一个异步过程,所以子进程被父进程创建出来以后父进程无法预测子进程什么时候结束。所以父进程通常会通过调用wait()或者waitpid()系统调用来获得子进程的终止状态!孤儿进程:顾名思义,孤儿进程是由于他们的父进程结束运行,但是子进程仍在继续运行,这时候这些子进程会变成孤儿进程,并且这些...
2019-10-12 16:14:43
172
原创 Linux学习笔记(内存映射mmap)
内存映射内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间<---->用户空间两者之间需要大量数据传输等操作的话效率是非常高的。因为mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通...
2019-10-10 15:40:56
232
原创 Linux学习笔记(文件操作)
文件描述符讲到文件 我们就需要知道什么是文件描述符,我们所有对设备和文件的操作都是使用文件描述符来进行的。通常用fd表示文件描述符。文件描述符是一个非负的整数,它是一个索引值,并指向在内核中每个进程所打开的文件的记录表当需要读写文件时,需要把文件描述符作为参数传递给相应的函数。通常在一个进程启动时,都会打开三个文件:标准输入:对应的文件描述符为0(STDIN_FILENO)标准输出:...
2019-10-10 14:59:53
144
原创 Linux学习笔记(shell脚本)
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序...
2019-09-28 16:54:22
407
原创 Linux学习笔记(vi文本编辑器)
vi是linux系统中一款著名的编辑软件,vim是基于vi发展而来,并且功能更加强大。由于vi与vim操作相差不多,在这里我们只介绍vi的操作就行了!在vi中输入命令时我们要注意区分大小写启动vivi 文件名然后我们就会进入到这样一个界面通过vi可以打开多个窗口例:1.竖向打开两个窗口进行编辑vi -oN 文件名1 文件名2上半部分就是1.txt的窗口,下半部分就是2....
2019-09-26 15:05:28
288
原创 Linux学习笔记(软链接和硬链接)
Linux链接文件类似于windows下的快捷方式。链接文件分为软链接和硬链接。硬链接:硬链接只能链接普通文件,不能链接目录。命令写法: ln 源文件名 链接文件名软链接:软链接不占用磁盘空间。源文件删除则软链接失效,软链接可以链接目录。命令写法:ln -s 源文件名 链接文件名例:硬链接现在有一个文本文件名为ZaQiang.txt现在我们看下该文件的属性:该文件的inod...
2019-09-24 15:01:00
545
1
原创 重载、覆盖、隐藏的区别
在C++中有三种概念,重载、覆盖、隐藏,这三种概念比较相似,但其中仍旧有很大区别!重载:我们经常使用函数的重载,最简单的重载,在我们使用一些排序算法时,如果数据类型发生改变,比如开始我们是根据int型数组来写的排序算法,但是当我们想对double类型数组也使用时,我们在没学习类模板与函数模板前会将刚才写的int型数据的排序算法复制一遍,然后将相关参数改为double型。这样一来,在调用排序算...
2019-09-20 15:41:32
333
原创 C++11笔记(2)
Smart Pointer智能指针auto_ptr在以前我们经常使用指针这个概念,指针既可以让我们精确的控制堆上的每一块内存,也让程序更加容易发生崩溃,这就让我们使用指针时必须要多加小心,所以在C++98开始便推出了auto_ptr,对裸指针进行封装,让程序员无需手动释放指针指向的内存区域,在auto_ptr生命周期结束时自动释放。class A{public: A(){cout&l...
2019-09-20 15:11:09
128
原创 C++11笔记(1)
1.类型推导 auto以前我们类型声明总是要明确的指出所定义的变量类型,但是有的类型就比较冗长,比如 :std::map<int, std::string>::const_iterator itr = m.find(1);前面的类型又长又不好写所以我们现在可以使用auto来替代类型,而编译器会自己推导出该变量的类型。int main(){ auto i = 10; aut...
2019-09-10 17:55:03
292
转载 标准模板库STL学习总结
标准模板库就是类与函数模板的大集合。STL共有6种组件:容器,容器适配器,迭代器,算法,函数对象和函数适配器。1、容器:容器是用来存储和组织其他对象的对象。STL容器类的模板在标准头文件中定义。主要如下所示①序列容器基本的序列容器是上面图中的前三类:关于三者的优缺点主要是:A:vector矢量容器:可以随机访问容器的内容,在序列末尾添加或删除对象,但是因为是从尾部删除,过程非常慢,...
2019-09-07 18:26:09
182
1
原创 关于printf("%d,%d",++i,i++)与printf("%d,%d",i++,++i)结果差异很大的问题解释
从我们学习C语言开始一直到C++,++i与i++一直是我们每天在使用的,他们一个是前增量,一个是后增量,他们的区别到底有多大?我们来看看下面的两种操作结果:当我们执行如下代码时:#include<stdio.h>int main(){ int i = 8; printf("%d,%d",i++,++i); return 0;}我们得到的结果是9,10 但...
2019-09-05 15:23:36
9547
5
原创 C++泛型编程,函数模板与类模板
泛型编程我们在编程过程中会经常使用一些很方便的算法,比如排序算法,查找算法等等,但是平时在我们使用的时候我们是根据自己需要的数据类型来写函数或者类,但是这样一来,代码的通用性就大大降低,在我们要对其他类型的数据做相同的操作时,我们必须将原先写好的函数或者类复制过来,然后将其中的数据类型改成我们需要的类型,这样子就会很麻烦!所以我们就有了泛型编程的这样的概念,。所谓泛型(Genericity),...
2019-09-03 16:33:14
268
原创 虚继承与虚函数
虚继承当我们学习了继承以后,我们会碰到这样一个问题。A派生出B和C,而B和C一起派生出了D,这时候D中会有两份一样的数据成员与成员函数,如图:例:class Base{public: void fn() { cout<<"this is Base::fn()"<<endl; }};class Base1:public Base{};cla...
2019-08-30 16:04:49
725
原创 C++运算符重载问题以及涉及的深拷贝与浅拷贝的问题
我们都对于“+”,“-”,“*”,“/”等等运算符(操作符)很熟悉,代码中天天敲这些东西。但是我们知道这些操作符都只能对基本类型进行运算,比如int,double什么的。现在我们学习了C++,每天都写了很多类,对象,但是有一件事情很苦恼,那就是我们想对类对象来实现以前运算符所能实现的功能时就必须写成员函数或者普通函数来调用函数,但是这样又很麻烦。在学习了C++中字符串类String后,我们发...
2019-08-29 15:42:16
741
2
原创 malloc/free与new/delete的异同处
malloc/free是我们在C语言里面学习的开辟空间和释放空间的函数。而new/delete是我们在C++里面学习的开辟空间和释放空间的运算符。malloc/free与new/delete的相同点:1.他们都是用来开辟出一块空间供我们使用;2.在使用malloc与new的时候必须要与free和delete配对使用,否则会造成内存泄漏。malloc/free与new/delete的不同点...
2019-08-26 17:26:56
401
原创 在C/C++中常见的错误
错误一:语法错误:1.将“==”写成了“=”2.复合语句忘记加{ }3.用数学表达式来写逻辑表达式例如: 6<x<29应写为6<x&&x<294.没有切换中英文编译错误:比如字符串中字符没有写规范,转义字符忘记加\等这些错误一般编译器都会报错,比较容易进行改正。错误二:数组越界:数组越界一般包含两种情况:(1)写越界:即数组长...
2019-08-24 15:45:25
354
原创 C++中的静态生存周期与动态生存周期
生存周期:我们知道,在对象或者变量从诞生到消失的这段时间,就是对象或者变量的生存周期。生存周期分为“静态生存周期”与“动态生存周期”。静态生存周期静态生存周期是指如果对象或者变量从定义的那一刻起,一直到程序的结束才销毁,这样的就称这个对象或变量具有静态生存期。静态生存期的变量有(1)全局变量(2)静态局部变量(3)静态成员变量1.全局变量:全局变量我们很熟悉了,例如#incl...
2019-08-22 18:40:39
2353
原创 构造函数与析构函数
在C++中对象的初始化与清理工作分别由两个特殊的函数来完成,他们就是构造函数与析构函数。构造函数:构造函数是在对象被创建时利用特定的值构造对象,并将对象初始化为一个特定的状态。构造函数的函数名与类名相同,并且它没有返回值,而且构造函数一般被声明为公有函数。如果类中没有写构造函数,编译器会自动生成一个隐含的默认构造函数,该构造函数的参数列表和函数体皆为空。但是如果类中声明了构造函数(无论有没...
2019-08-20 18:18:27
303
原创 错题总结
1.在C语言中,以下代码执行之后,*p的值为()void func(int *p){ static int num = 4; p = # (*p)--;}int main(){ int i = 5; int *p = &i; func(p); printf("%d", *p); return 0;}...
2019-08-16 15:28:01
422
原创 Const与Const的用法
Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。Const的作用:(1)可以定义常量: 即 const int a=5;a就是一个被const修饰的常量,它在程序运行期间是无法被改变的!(2)保护被修饰的东西: 例如一个函数的首部为 void fn(const int* p)p是一个指针变量,函数fn接收到的是...
2019-08-16 14:35:52
454
QtitanRibbon5.3.1 帮助开发文档
2020-07-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人