当前位置: 首页 > news >正文

QT UI设计

在QT中添加VTK

在main函数中初始化

//VTK的初始化语句
#ifndef INITIAL_OPENGL
#define INITIAL_OPENGL
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL);
VTK_MODULE_INIT(vtkRenderingFreeType);
#endif

在QT中全屏显示界面以及界面的选择

所需的头文件

#include <QDesktopWidget>

main()函数代码

QApplication a(argc, argv);
UI_Designer w;
QDesktopWidget *desktop = QApplication::desktop();
int screen_count = desktop->screenCount();
w.setGeometry(desktop->screenGeometry(1));//多显示器选择
w.showFullScreen();
//w.show();

给QT的窗口添加背景图像

//添加背景
QPixmap pixmap("Resources/icon/1.jpg");
QPalette   palette;
palette.setBrush(backgroundRole(), QBrush(pixmap));
setPalette(palette);
setAutoFillBackground(true);
//show();

QT中中文显示乱码

#include <qtextcodec.h> QTextCodec *codec = QTextCodec::codecForName(“GBK”);//修改这两行 
w.setWindowTitle(codec->toUnicode(“学生事务管理系统”)); 

QT Designer中贴图设置

在控件中的styleSheet中设置图片资源

#frame { 
border-image: url(:/UI_Designer/Resources/icon/test_Frame.png);} 
#frame * { 
border-image: url(:)
}

其中#frame{}表示frame这个控件

#frame * { }表示frame控件中的子控件

双滑块的滑动条调用

添加重新继承的Slider代码,包含Qxtspanslider.h、Qxtspanslider_p.h、QxtSpanSlider.cpp这三个文件。
在QT Designer中选中QSlider右键提升为,然后输入
提升类的名称:QxtSpanSlider
头文件:Qxtspanslider.h
最后点击添加即可。

ui.verticalSlider->setHandleMovementMode(QxtSpanSlider::NoOverlapping);//设置滑块不能越界
ui.verticalSlider->setMaximum(307100);//设置最大值
ui.verticalSlider->setMinimum(-204800);//设置最小值
ui.verticalSlider->setLowerValue(0);//设置当前最小值
ui.verticalSlider->setUpperValue(25000);//设置当前最大值
ui.verticalSlider->setTickInterval(10000);//设置标尺的间隔
ui.verticalSlider->setTickPosition(QSlider::TicksAbove);//设置标尺
//槽函数
connect(ui.verticalSlider, SIGNAL(lowerValueChanged(int)), this, SLOT(lowerValueChangedSlot(int)));
connect(ui.verticalSlider, SIGNAL(upperValueChanged(int)), this,SLOT(upperValueChangedSlot(int)));

QT全屏显示

#include <QtPlatformHeaders/QWindowsWindowFunctions>PET_CT_show w;QDesktopWidget *desktop = QApplication::desktop();
int screen_count = desktop->screenCount();
w.setGeometry(desktop->screenGeometry(1));//下面一条语句一定要加,不然全屏显示的时候会有bug
QWindowsWindowFunctions::setHasBorderInFullScreen(w.windowHandle(), true);
w.showFullScreen();

vtk中进行颜色映射

//彩色映射
vtkSmartPointer<vtkNIFTIImageReader> reader_NII = vtkSmartPointer<vtkNIFTIImageReader>::New();
reader_NII->SetFileName(zj_nii_path.toStdString().data());
reader_NII->Update();vtkSmartPointer<vtkLookupTable> colorTable =vtkSmartPointer<vtkLookupTable>::New();
colorTable->SetRange(0.0, 14815);
colorTable->SetHueRange(-0.5, 1);//0.1  0.5
colorTable->SetValueRange(0, 1);//0.6  1.0
colorTable->Build();vtkSmartPointer<vtkImageMapToColors> colorMap =vtkSmartPointer<vtkImageMapToColors>::New();
colorMap->SetInputConnection(reader_NII->GetOutputPort());
colorMap->SetLookupTable(colorTable);
colorMap->Update();vtkSmartPointer<vtkImageActor> shiftscaleActor =vtkSmartPointer<vtkImageActor>::New();
shiftscaleActor->SetInputData(colorMap->GetOutput());page_6_imageViewer_YZ->SetInputData(colorMap->GetOutput());
ui.qvtkWidget_page_7_2->SetRenderWindow(page_6_imageViewer_YZ->GetRenderWindow());
page_6_imageViewer_YZ->SetSliceOrientationToXY();vtkSmartPointer<myVtkInteractorStyleImage> page_6_myInteractorStyle_YZ = vtkSmartPointer<myVtkInteractorStyleImage>::New();
page_6_myInteractorStyle_YZ->SetImageViewer(page_6_imageViewer_YZ, ui.horizontalSlider_YZ);
page_6_imageViewer_YZ->SetupInteractor(page_6_renWin_YZ);
page_6_imageViewer_YZ->SetSlice((page_6_imageViewer_YZ->GetSliceMax() - page_6_imageViewer_YZ->GetSliceMin()) / 2);
page_6_renWin_YZ->SetInteractorStyle(page_6_myInteractorStyle_YZ);
//设置滑块		
ui.horizontalSlider_YZ->setMinimum(page_6_imageViewer_YZ->GetSliceMin());
ui.horizontalSlider_YZ->setMaximum(page_6_imageViewer_YZ->GetSliceMax());
ui.horizontalSlider_YZ->setValue((page_6_imageViewer_YZ->GetSliceMax() - page_6_imageViewer_YZ->GetSliceMin()) / 2);
//设置数据框
ui.spinBox_YZ->setRange(page_6_imageViewer_YZ->GetSliceMin(), page_6_imageViewer_YZ->GetSliceMax());
ui.spinBox_YZ->setValue((page_6_imageViewer_YZ->GetSliceMax() - page_6_imageViewer_YZ->GetSliceMin()) / 2);//XY
page_6_imageViewer_YZ->GetRenderer()->ResetCamera();
vtkCamera *page_6_aCamera_YZ = vtkCamera::New();
page_6_aCamera_YZ = page_6_imageViewer_YZ->GetRenderer()->GetActiveCamera();
page_6_aCamera_YZ->Zoom(1.45);//图像缩放
page_6_imageViewer_YZ->GetRenderer()->SetActiveCamera(page_6_aCamera_YZ);
//page_2_imageViewer_XY->GetRenderer()->SetBackground(1, 0, 0);
page_6_imageViewer_YZ->Render();//-----------------------------------------------------------------------
page_6_renWin_YZ->Start();

将jpg读入内存后用vtk显示

//获取per_path的地址
QDir dir_per(per_path);
if (dir_per.exists())
{//获取per文件路径下的文件夹和路径dir_per.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);//文件夹|文件|不包含./和..///排序文件夹优先//dir_per.setSorting(QDir::Files);//获取文件后缀是jpg的文件,如果使用则只搜索当前文件夹下的文件QStringList filer_per;filer_per << "*.jpg";list_per.clear();list_per = dir_per.entryInfoList(filer_per, QDir::Files, 0x00);//读取所有的per_jpg图片到内存中for (int i = 0; i < list_per.size(); i++){per_jpg_file_path.push_back(per_path + QString("%1").arg(i) + ".jpg");per_jgp_image.push_back(vtkSmartPointer<vtkJPEGReader>::New());per_jgp_image[i]->SetFileName(per_jpg_file_path[i].toLatin1().data());}
}//vtk显示
//显示per
page_1_imageViewer_per->SetInputConnection(per_jgp_image[int(list_per.size() / 2)]->GetOutputPort());//SetInputConnection
ui.qvtkWidget_page_2_1->SetRenderWindow(page_1_imageViewer_per->GetRenderWindow());
//page_1_imageViewer_per->SetSliceOrientationToXY();page_1_myInteractorStyle_per->SetImageViewer(page_1_imageViewer_per, ui.horizontalSlider_XY, per_jgp_image, Page_Index, list_per);
page_1_imageViewer_per->SetupInteractor(page_1_renWin_per);
page_1_renWin_per->SetInteractorStyle(page_1_myInteractorStyle_per);
//设置滑块		
ui.horizontalSlider_XY->setMinimum(0);
ui.horizontalSlider_XY->setMaximum(list_per.size() - 1);
ui.horizontalSlider_XY->setValue(int(list_per.size() / 2));
//设置数据框
ui.spinBox_XY->setRange(0, list_per.size() - 1);
ui.spinBox_XY->setValue(int(list_per.size() / 2));page_1_imageViewer_per->GetRenderer()->ResetCamera();
vtkCamera *page_1_aCamera_per = vtkCamera::New();
page_1_aCamera_per = page_1_imageViewer_per->GetRenderer()->GetActiveCamera();
page_1_aCamera_per->Zoom(1.45);
page_1_imageViewer_per->GetRenderer()->SetActiveCamera(page_1_aCamera_per);
page_1_imageViewer_per->Render();//显示图像open_algorithm_page2 = 1;
page_1_renWin_per->Start();

删除文件夹及文件夹下的所有文件

void RemoveFiles(string dir)
{//在目录后面加上"\\*.*"进行第一次搜索string newDir = dir + "\\*.*";//用于查找的句柄intptr_t handle;struct _finddata_t fileinfo;//第一次查找handle = _findfirst(newDir.c_str(), &fileinfo);if (handle == -1) {cout << "无文件" << endl;system("pause");return;}do{if (fileinfo.attrib & _A_SUBDIR) {//如果为文件夹,加上文件夹路径,再次遍历if (strcmp(fileinfo.name, ".") == 0 || strcmp(fileinfo.name, "..") == 0)continue;// 在目录后面加上"\\"和搜索到的目录名进行下一次搜索newDir = dir + "\\" + fileinfo.name;listFiles(newDir.c_str());//先遍历删除文件夹下的文件,再删除空的文件夹cout << newDir.c_str() << endl;if (_rmdir(newDir.c_str()) == 0) {//删除空文件夹cout << "delete empty dir success" << endl;}else {cout << "delete empty dir error" << endl;}}else {string file_path = dir + "\\" + fileinfo.name;cout << file_path.c_str() << endl;if (remove(file_path.c_str()) == 0) {//删除文件cout << "delete file success" << endl;}else {cout << "delete file error" << endl;}}} while (!_findnext(handle, &fileinfo));_findclose(handle);return;
}

调用:

//生成了文件,顺便删除中间过程
QString delete_path = get_exe_result_path + "\\processed_patches";
std::string dirName = delete_path.toStdString();
//RemoveDirectory(dirName.c_str());
QDir dir(delete_path);
if (dir.exists())
{RemoveFiles(dirName);rmdir(dirName.c_str());
}

相关文章:

QT UI设计

在QT中添加VTK 在main函数中初始化 //VTK的初始化语句 #ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL); VTK_MODULE_INIT(vtkInteractionStyle); VTK_MODULE_INIT(vtkRenderingVolumeOpenGL); VTK_MODU…...

前端小白的学习之路(CSS3 一)

提示&#xff1a;CSS3 是 Cascading Style Sheets&#xff08;层叠样式表&#xff09;的第三个主要版本&#xff0c;引入了许多新的特性和增强功能&#xff0c;用于设计和布局网页。本章记录CSS3新增选择器&#xff0c;盒子模型。 目录 一、C3新增选择器 1) 属性选择器 1.[c…...

春暖花开,一起来看看2024年品牌春分海报吧!

春分&#xff08;Vernal equinox&#xff09;已至&#xff0c;春花烂漫、燕子归来、百草回芽。 今天我们要分享的是2024年品牌发布的春分节气海报合集&#xff0c;快来随我们一起感受这昂扬、蓬勃的春意吧! &#xff08;1&#xff09;泸州老窖 &#xff08;2&#xff09;BD…...

golang面试题总结

零、go与其他语言 0、什么是面向对象 在了解 Go 语言是不是面向对象&#xff08;简称&#xff1a;OOP&#xff09; 之前&#xff0c;我们必须先知道 OOP 是啥&#xff0c;得先给他 “下定义” 根据 Wikipedia 的定义&#xff0c;我们梳理出 OOP 的几个基本认知&#xff1a; …...

BUGKU-WEB shell

题目描述 题目截图如下&#xff1a; 描述&#xff1a; $poc "a#s#s#e#r#t";$poc_1 explode("#", $poc);$poc_2 $poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];$poc_2($_GET[s])进入场景看看&#xff1a;是一个空白的界面 解题思路 …...

系统重构后,对项目定制开发的兼容性问题

公司自实施产品线战略以来&#xff0c;基本推翻了全部旧有业务模块。后续以标准产品二次开发的模式进行项目开发。但在涉及到一些旧有系统二期、三期升级改造过程中。不可避免的需要解决旧有系统的客户定制化开发兼容性问题。也就是旧有系统定制开发的模块不能丢弃。重新开发从…...

Linux---基本操作命令之用户管理命令

1.1useradd 添加新用户 root用户&#xff1a;/root 普通用户&#xff1a;/home/ 创建的用户还是david&#xff0c;只是在dave文件夹下 1.2 passwd 设置密码 给用户tony设置密码: 123456 1.3 id 查看用户是否存在 查看有没有这个用户&#xff1a;id 名字 gid&#xff1a;用…...

excel 破解 保护工作簿及保护工作表

excel 破解 保护工作簿及保护工作表 对于这种 保护工作簿及保护工作表 不知道密码时&#xff0c;可以使用以下方法破解 保护工作簿破解 打开受保存的excel 右键点击sheet名称 —> 查看代码 复制以下代码&#xff0c;粘贴到代码区域 Sub 工作簿密码破解() ActiveWorkbook.…...

django-comment-migrate 模型注释的使用

django-comment-migrate 的使用 django-comment-migrate 是一个 Django 应用&#xff0c;用于将模型注释自动迁移到数据库表注释中。它可以帮助您保持数据库表注释与模型定义的一致性&#xff0c;并提高代码的可读性。 安装 要使用 django-comment-migrate&#xff0c;您需要…...

Python学习:列表

Python 列表概念 在Python中&#xff0c;列表&#xff08;List&#xff09;是一种有序、可变、允许重复元素的数据结构。列表使用方括号 ​[]​来表示&#xff0c;可以包含任意类型的元素&#xff0c;如整数、字符串、列表等。 Python 访问列表中的值 在Python中&#xff0…...

C语言每日一题—判断是否为魔方矩阵

魔方矩阵 在魔方阵中&#xff0c;所有的行、列和对角线都拥有相同的和。例如&#xff1a;17 24 1 8 15 23 5 7 14 16 4 9 24 6 13 20 22 和 3 5 710 12 19 21 3 8 1 611 18 25 2 9 写一个程序读入一个二维整型数组并…...

Java数组新手冷知识

J a v a Java Java 中&#xff0c;数组是对象&#xff0c;当你将一个数组传递给方法时&#xff0c;你其实是传递了数组的引用&#xff08;地址&#xff09;&#xff0c;而不是数组的副本。因此&#xff0c;在 m m m 方法中修改了数组 n n n 的内容后&#xff0c;这种改变在方…...

Linux——程序地址空间

我们先来看这样一段代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <stdlib.h>int g_val 0;int main() {pid_t id fork();if(id < 0){perror("fork");return 0;}else if(id 0){ //child,子进程肯定先跑完&#xff0c;也…...

Linux编程4.9 网络编程-建立连接

1、TCP的连接与断开 三次握手与四次挥手 2、服务器端并发性处理 2.1 多进程模型 一个父进程&#xff0c;多个子进程父进程负责等待并接受客户端连接子进程: 完成通信&#xff0c;接受一个客户端连接&#xff0c;就创建一个子进程用于通信。 2.2 多线程模型 多线程服务器是…...

威胁检测与分析--云图大师

威胁检测与分析--云图大师 当 Internet 在 1960 年代创建时&#xff0c;被设想为一个革命性的计算机网络&#xff0c;供几千名研究人员使用。创建这个快速可靠的网络使用了许多资源&#xff0c;其开发人员考虑的安全措施主要是为了防止军事威胁和潜在的强大入侵者。 在那个时代…...

Python基础入门 --- 7.函数

Python基础入门 第七章&#xff1a; 7.函数 7.1 函数多返回值 按照返回值顺序&#xff0c;写对应顺序的多个变量接收&#xff0c;变量之间用逗号分隔&#xff0c;支持不同数据类型return def test_return():return 1,"hello", Truex, y, z test_return() print…...

第4周 Python程序流程控制刷题

单击题目&#xff0c;直接跳转到页面刷题&#xff0c;一周后公布答案。 B2050&#xff1a;三角形判断B2037&#xff1a;奇偶数判断B2039&#xff1a;整数大小比较P5711&#xff1a;闰年判断P5714&#xff1a;肥胖问题B2043&#xff1a;判断能否被 3&#xff0c;5&#xff0c;7…...

高亮搜索中的关键字怎么实现

在前端实现搜索关键字高亮&#xff0c;通常涉及到对页面上的文本内容进行操作&#xff0c;并使用CSS来改变这些内容的样式。以下是一个基本的步骤和示例&#xff0c;说明如何实现这一功能&#xff1a; HTML结构&#xff1a;首先&#xff0c;你需要在HTML中设置一个搜索框和一个…...

OpenCV系列文章目录(持续更新中......)

引言&#xff1a; OpenCV是一个开源的计算机视觉库&#xff0c;由英特尔公司开发并开源的一组跨平台的C函数和少量的C函数组成&#xff0c;用于实时图像处理、计算机视觉和机器学习等应用领域。OpenCV可以在包括Windows、Linux、macOS等各种操作系统平台上使用&#xff0c;具…...

【机器学习系列】M3DM工业缺陷检测部署与训练

一.基础资料 1.Git 地址 地址 2.issues issues 3.参考 参考 csdn 二.服务器信息 1.GPU 服务器 GPU 服务器自带 CUDA 安装(前提是需要勾选上)CUDA 需要选择大于 11.3 的版本登录服务器后会自动安装 GPU 驱动 2.CUDA 安装 GPU 服务器自带 CUDA CUDA 版本查看 3.登录信…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...