首页 > 系统相关 >ubuntu20.04 Qt6引用dcmtk库实现dicom文件读取和字符集转换

ubuntu20.04 Qt6引用dcmtk库实现dicom文件读取和字符集转换

时间:2024-09-10 15:50:56浏览次数:9  
标签:ubuntu20.04 Qt6 dicom MainWindow dcmtk ui str OFString fileformat

1 环境问题

安装完Qt6,新建Qt/QtQuick CMake工程编译出现如下错误:

Found package configuration file: Qt6Config.cmake but it set Qt6 FOUND to FALSE so package "Qt6" is considered to be NOT FOUND.

原因:

这是因为系统中缺少OpenGL库,可以安装libgl1-mesa-dev

解决方法:

sudo apt install libgl1-mesa-dev

项目编译成功后运行,如果出现如下错误:

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even through it was found.

sudo apt install libxcb-cursor*

2 引用dcmtk

由于作者使用cmake编译,所以需要使用CMakeLists添加第三方库的方式,来引用dcmtk库。

set(DCMTK_INC_DIR "/home/charles/workdir/software/dcmtk-3.6.8/dcmtk-3.6.8-release/include")
set(DCMTK_LIB_DIR "/home/charles/workdir/software/dcmtk-3.6.8/dcmtk-3.6.8-release/lib")
include_directories(${DCMTK_INC_DIR})
link_directories(${DCMTK_LIB_DIR})

target_link_libraries(dcmtk-test PUBLIC
    Qt${QT_VERSION_MAJOR}::Widgets
    ${DCMTK_LIB_DIR}/libdcmtk.so
)

3 测试程序

实现对dicom tag值的读取,以及字符集的转换。以支持中文或其他字符的显示

#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <dcmtk/dcmdata/dctk.h>
#include <dcmtk/ofstd/ofchrenc.h>

OFString toUTF8(OFString &curEncoding,OFString &valStr)
{
    OFCharacterEncoding encoding;
    OFCondition res = encoding.selectEncoding(curEncoding, OFString("UTF-8"));
    OFString toString("");
    res = encoding.convertString(valStr, toString);
    return toString;
}

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    loadDcm();

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::loadDcm()
{
    DcmFileFormat fileformat;
    OFCondition status = fileformat.loadFile("./test.dcm");
    if (status.good())
    {
        OFString str;
        OFString charset("GB18030");
        if (fileformat.getDataset()->findAndGetOFString(DCM_SpecificCharacterSet, str).good())
        {
            charset = str;
            ui->textEdit->append(QString::fromStdString(str.c_str()));
        }
        if (fileformat.getDataset()->findAndGetOFString(DCM_PatientName, str).good())
            ui->textEdit->append(QString::fromUtf8(toUTF8(charset,str).c_str()));
        if (fileformat.getDataset()->findAndGetOFString(DCM_PatientID, str).good())
            ui->textEdit->append(QString::fromUtf8(toUTF8(charset,str).c_str()));
        if (fileformat.getDataset()->findAndGetOFString(DCM_BodyPartExamined, str).good())
            ui->textEdit->append(QString::fromUtf8(toUTF8(charset,str).c_str()));
        if (fileformat.getDataset()->findAndGetOFString(DCM_PatientPosition, str).good())
            ui->textEdit->append(QString::fromUtf8(toUTF8(charset,str).c_str()));
    }
    else
        ui->textEdit->append("Bad file!");
}

执行效果如图:

标签:ubuntu20.04,Qt6,dicom,MainWindow,dcmtk,ui,str,OFString,fileformat
From: https://blog.csdn.net/genispan/article/details/142098955

相关文章

  • PyQt6/PySide6:账本项目前端制作【附完整项目地址】
    0.前言最近在家里闲着没事,正好又看到朋友@studentWheat发了篇用Tkinter做的账本,于是决定跟他一起改进这个程序。屏幕截图:1.后端后端主要是朋友做的,在这里就不多说了,放个代码:src/api.pyfromcollectionsimportdefaultdictclassApiError(RuntimeError):passd......
  • Python教程(二十一) : 从零开始制作计算器应用【PyQt6】
    文章目录专栏列表环境准备代码解析主要组件初始化界面布局设置事件处理计算逻辑运行应用完整代码示例截图总结注意专栏列表Python教程(十):面向对象编程(OOP)Python教程(十一):单元测试与异常捕获Python教程(十二):面向对象高级编程详解Python教程(十三):常用内置模块详解Python......
  • 记录 PyQt6 / PySide 6 自定义边框窗口的 Bug 及可能可行的解决方案:窗口抖动和添加 DW
    前言:本篇文章将要讨论我在前不久发表的关于PyQt6/PySide6自定义边框窗口代码及内容中的问题:(终)PyQt6/PySide6+Pywin32自定义标题栏窗口+完全还原Windows原生窗口边框特效_pyside6win32无边框窗口-CSDN博客https://blog.csdn.net/2402_84665876/article/detail......
  • QT6编写外部库并调用
    步骤创建qt项目,项目类型选择库。注意,在创建项目的过程中:在Details页面的QTmodule处,需要选择使用Core、Gui还是Widgets。如果不需要界面就选择Core,如果需要Gui或Widget就选择对应的即可。创建完成项目后,编写项目内容。编写完毕后点击构建(注意不是Debug或Release是Build)。如......
  • ubuntu20.04使用systemd配置开机自启脚本
    个人学习整理,简单记录!!!实现步骤准备脚本文件1.创建脚本文件touchtest.sh2.编写完脚本文件后,修改脚本文件权限chmod777test.sh//权限设置看情况3.测试脚本效果./test.sh添加开机自启动服务1.创建service文件cd/etc/systemd/systemtouchtest.service2.编......
  • ubuntu20.04内核重新编译(5.15.x)
    一、源码获取方法1:gitclonegit://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/focal方法2:#apt-cachesearchlinux-sourcelinux-source-LinuxkernelsourcewithUbuntupatcheslinux-source-5.4.0-Linuxkernelsourceforversion5.4.0with......
  • Ubuntu20.04安装ROS,一次成功,详细简洁
     仔细看文档系统要求:Ubuntu20.04ROS安装版本:Noetic首先,最重要的就是ROS软件源,很多小伙伴都是在网上随便复制的软件源和密钥,非常不建议,复制三方的软件源,因为如果出新的,可能旧的官方维护就少了,ROS就容易崩。我是使用中科大的ROS软件源接下来教大家怎么做进这个网址https:/......
  • x86 ubuntu20.04 ros:noetic-perception-focal 镜像测试
    https://hub.docker.com/_/ros/tags?page=&page_size=&ordering=&name=noetic1.启动容器:dockerpullros:noetic-perception-focaldockerrun-it--envDISPLAY=$DISPLAY--volume/tmp/.X11-unix:/tmp/.X11-unix--privileged--gpusall--volume/home/h/doc......
  • Ubuntu20.04 安装 libevent
    https://blog.csdn.net/qq_62381297/article/details/136151148Ubuntu20.04安装libevent文章目录libevent源码下载libevent安装libevent使用echo服务器:echo客户端:运行结果libevent源码下载https://libevent.orglibevent安装$tar-zxvflibevent-2.1.12-stable.tar.gz......
  • VS2022+QT6.7.2 定时器的使用(两种方法)
    目录一、继承QObject定时器事件二、QTimer类三、具体实现一、继承QObject定时器事件  所有继承自QObject的类,都会有一个timerEvent(QTimerEvent*event)的纯虚函数,startTimer()设定定时间隔并启动,再重载这个函数以处理自己的定时任务,多个定时任务用timeId区分,结束后......