当前位置: 首页 > 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());
}

相关文章:

  • 【LeetCode周赛】第388场周赛
  • C while 循环
  • C++ lambda函数个人理解
  • 【话题】2024年AI辅助研发趋势,有那些应用领域
  • 【STL】string各种函数的应用
  • TinyEMU之RISCV-PK编译
  • SpringCloud-Alibaba-Nacos教程
  • vs2022 错误(活动) E1696 无法打开 源 文件 “bits/stdc++.h“解决办法
  • Github上哪些好用的工具
  • 2022 年河南省中等职业教育技能大赛
  • 网络编程:网络编程基础
  • 未来城市:数字孪生技术助力智慧城市构建
  • 高效Go编程: encoding/csv标准库深度解析
  • 深入探索HAProxy:高性能负载均衡器的奥秘
  • HBase安装,配置,启动,检查
  • 网络传输文件的问题
  • 【comparator, comparable】小总结
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 08.Android之View事件问题
  • JavaWeb(学习笔记二)
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • React16时代,该用什么姿势写 React ?
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 回顾 Swift 多平台移植进度 #2
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 区块链共识机制优缺点对比都是什么
  • 如何在 Tornado 中实现 Middleware
  • 系统认识JavaScript正则表达式
  • 新手搭建网站的主要流程
  • gunicorn工作原理
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #include<初见C语言之指针(5)>
  • #pragma once与条件编译
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (31)对象的克隆
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (利用IDEA+Maven)定制属于自己的jar包
  • (十八)SpringBoot之发送QQ邮件
  • (转)jQuery 基础
  • ******之网络***——物理***
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET框架设计—常被忽视的C#设计技巧
  • /run/containerd/containerd.sock connect: connection refused
  • @EnableWebMvc介绍和使用详细demo
  • [1525]字符统计2 (哈希)SDUT
  • [AAuto]给百宝箱增加娱乐功能
  • [BUUCTF 2018]Online Tool