【转】17.Qt界面布局管理详解

在上一节,通过一个简单的应用程序,分析了 Qt 创建的 GUI 应用程序中各个文件的作用,剖析了可视化设计的UI文件是如何被转换为 C++ 的类定义,并自动创建界面的。这些是使用 Qt Creator 可视化设计用户界面,并使各个部分融合起来运行的基本原理。

本节再以一个稍微复杂的例子来讲解设计 GUI 的常见功能,包括界面设计时布局的管理,以及程序里如何访问界面组件。

实例程序功能

创建一个 Widget Application 项目 samp2_2,在创建窗体时选择基类 QDialog,生成的类命名为 QWDialog,并选择生成窗体。

如此新建的项目 samp2_2 有一个界面文件 qwdialog.ui,一个头文件 qwdialog.h 和源程序文件 qwdialog.cpp。此外,还有项目文件 samp2_2.pro 和主程序文件 main.cpp。

qwdialog.ui 界面文件设计时界面如图 1 所示。程序的主要功能是对中间一个文本框的文字字体样式和颜色进行设置。


实例程序 samp2_2 设计时界面
图 1 实例程序 samp2_2 设计时界面


在界面设计时,对需要访问的组件修改其 objectName,如各个按钮、需要读取输入的编辑框、需要显示结果的标签等,以便在程序里区分。对于不需要程序访问的组件则无需修改其 objectName,如用于界面上组件分组的 GroupBox、Frame、布局等,让 UI 设计器自动命名即可。

对图 1 中几个主要组件的命名、属性设置见表 2。
 

表 2 qwdialog.ui 中各个组件的相关设置
对象名类名称属性设置备注
txtEdit QPlainTextEditText="Hello, World
It is my demo. "
Font.PointSize=20
用于显示文字内容,可编辑
chkBoxUnder QCheckBox Text="Underline"设置字体为下划线
chkBoxItalic QCheckBox Text="Italic"设置字体为斜体
chkBoxBold QCheckBox Text="Bold"设置字体为粗体
rBtnBlack QRadioButton Text="Black"字体颜色为黑色
rBtnRed QRadioButton Text="Red"字体颜色为红色
rBtnBlue QRadioButton Text="Blue"字体颜色为蓝色
btnOK QPushButton Text="确定"返回确定,并关闭窗口
btnCancel QPushButton Text="取消" 返回取消,并关闭窗口
btnClose QPushButton Text="退出"退出程序
QWDialog QWDialog windowTitle="Dialog by Designer"界面窗口的类名称是QWDialog,objectName 不要修改


对于界面组件的属性设置,需要注意以下几点。

  1. objectName 是窗体上创建的组件的实例名称,界面上的每个组件需要有一个唯一的 objectName,程序里访问界面组件时都是通过其 objectName 进行访问,自动生成的槽函数名称里也有 objectName。所以,组件的 objectName 需要在设计程序之前设置好,设置好之后一般不要再改动。若设计程序之后再改动 objectName,涉及的代码需要相应的改动。
  2. 窗体的 objectName 就是窗体的类名称,在 UI 设计器里不要修改窗体的 objectName,窗体的实例名称需要在使用窗体的代码里去定义。

界面组件布局

Qt 的界面设计使用了布局(Layout)功能。所谓布局,就是界面上组件的排列方式,使用布局可以使组件有规则地分布,并且随着窗体大小变化自动地调整大小和相对位置。布局管理是 GUI 设计的必备技巧,下面逐步讲解如何实现图 1 所示的界面设计。

界面组件的层次关系

为了将界面上的各个组件的分布设计得更加美观,经常使用一些容器类,如 QgoupBox、QtabWidget、QFrame 等。

例如,将 3 个 CheckBox 组件放置在一个 GroupBox 组件里,该 GroupBox 组件就是这 3 个 CheckBox 的容器,移动这个 GroupBox 就会同时移动其中的 3 个 CheckBox。


界面组件的放置及层次关系
图 3 界面组件的放置及层次关系


图 3 显示的是设计图 1 界面的前期阶段。在窗体上放置了 2 个 GroupBox 组件,在 groupBox1 里放置 3 个 CheckBox 组件,在 groupBox2 里放置 3 个 RadioButton 组件。图 3 右侧 Object Inspector 里显示了界面上各组件之间的层次关系。

布局管理

Qt 为界面设计提供了丰富的布局管理功能,在 UI 设计器中,组件面板里有 Layouts 和 Spacers 两个组件面板,在窗体上方的工具栏里有布局管理的按钮(如图 4 所示)。


用于布局可视化设计的组件面板和工具栏
图 4 用于布局可视化设计的组件面板和工具栏


Layouts 和 Spacers 两个组件面板里的布局组件的功能见表 5:
 

表 5 组件面板上用于布局的组件
布局组件功能
Vertical Layout垂直方向布局,组件自动在垂直方向上分布
Horizontal Layout水平方向布局,组件自动在水平方向上分布
Grid Layout网格状布局,网状布局大小改变时,每个网格的大小都改变
Form Layout窗体布局,与网格状布局类似,但是只有最右侧的一列网格会改变大小
Horizontal Spacer一个用于水平分隔的空格
Vertical Spacer一个用于垂直分隔的空格


使用组件面板里的布局组件设计布局时,先拖放一个布局组件到窗体上,如在设计图 4 中 3 个按钮的布局时,先放一个 Horizontal Layout 到窗体上,布局组件会以红色边框显示。再往布局组件里拖放 3 个 Push Button 和 2 个 Horizontal Spacer,就可以得到图 1 中 3 个按钮的水平布局效果。

在设计窗体的上方有一个工具栏,用于调整设计器进入不同的状态,以及进行布局设计,工具栏上各按钮的功能见表 6。
 

表 6 UI设计器工具栏各按钮的功能
按钮及快捷键功能
Edit Widget (F3)界面设计进入编辑状态,就是正常的设计状态
Edit Signals/Slots(F4) 进入信号与槽的可视化设计状态
Edit Buddies进入伙伴关系编辑状态,可以设置一个Label 与一个组件成为伙伴关系
Edit Tab Order进入Tab 顺序编辑状态,Tab 顺序是在键盘上按Tab 键时,输入焦点在界面各组件之间跳动的顺序
Lay Out Horizontally (Ctrl+H)将窗体上所选组件水平布局
Lay Out Vertically (Ctrl+L) 将窗体上所选组件垂直布局
Lay Out Horizontally in Splitter将窗体上所选组件用一个分割条进行水平分割布局
Lay Out Vertically in Splitter将窗体上所选组件用一个分割条进行垂直分割布局
Lay Out in a Form Layout将窗体上所选组件按窗体布局
Lay Out in a Grid将窗体上所选组件网格布局
Break Layout解除窗体上所选组件的布局,也就是打散现有的布局
Adjust Size(Ctrl+J)自动调整所选组件的大小


使用工具栏上的布局控制按钮时,只需在窗体上选中需要设计布局的组件,然后点击某个布局按钮即可。在窗体上选择组件时同时按住 Ctrl 键,可以实现组件多选,选择某个容器类组件,相当于选择了其内部的所有组件。

例如,在图 3 的界面中,选中 groupBox1,然后单击“Lay Out Horizontally”工具栏按钮,就可以对 groupBox1 内的 3 个 CheckBox 水平布局。

在图 4 的界面上,使 groupBox1 里的 3 个 CheckBox 水平布局,groupBox2 里的 3 个 RadioButton 水平布局,下方 3个按钮水平布局。在窗体上又放置了一个 PlainTextEdit 组件。现在,改变 groupBox1、groupBox2 或按钮的水平布局的大小,其内部组件都会自动改变大小。但是当改变窗体大小时,界面上的各组件却并不会自动改变大小。

随后还需为窗体指定一个总的布局。选中窗体(即不要选择任何组件),单击工具栏上的“Lay Out Vertically”按钮,使 4 个组件垂直分布。这样布局后,当窗体大小改变时,各个组件都会自动改变大小。

在 UI 设计器里可视化设计布局时,要善于利用水平和垂直空格组件,善于设置组件的最大、最小宽度和高度来实现某些需要的布局效果。

伙伴关系与 Tab 顺序

在 UI 设计工具栏上单击“Edit Buddies”按钮可以进入伙伴关系编辑状态,如设计一个窗体时,进入伙伴编辑状态之后的界面如图 7 所示。


编辑伙伴关系
图 7 编辑伙伴关系


伙伴关系(Buddy)是指界面上一个 Label 和一个组件相关联,如图 7 中的伙伴关系编辑状态,单击一个 Label,按住鼠标左键,然后拖向一个组件,就建立了 Label 和组件之间的伙伴关系。

伙伴关系是为了在程序运行时,在窗体上用快捷键快速将输入焦点切换到某个组件上。例如,在图 7 的界面上,设定“姓名”标签的 Text 属性为“姓名(&N)”,其中符号“&”用来指定快捷字符,界面上并不显示“&”,这里指定快捷字母为 N。那么程序运行时,用户按下 Alt+N,输入焦点就会快速切换到“姓名”关联的输入框内。


Tab 顺序编辑状态
图 8 Tab 顺序编辑状态


在 UI 设计器工具栏上单击“Edit Tab Order”按钮进入Tab 顺序编辑状态(如图 8 所示)。Tab 顺序是指在程序运行时,按下键盘上的 Tab 键时输入焦点的移动顺序。一个好的用户界面,在按 Tab 键时,焦点应该以合理的顺序在界面上移动,而不是随意地移动。

进入 Tab 顺序编辑状态后,在界面上会显示具有 Tab 顺序组件的编号,依次按希望的顺序单击组件,就可以重排 Tab 顺序了。没有输入焦点的组件是没有 Tab 顺序的,如 Label 组件。

项目功能实现

下面开始设计程序功能。对于该程序,希望它的功能如下:

  1. 单击 UnderLine、Italic、Bold 3 个 CheckBox 时,根据其状态,设置 PlainTextEdit 里的文字的字体样式;
  2. Black、Red、Blue 3 个 RadioButton 是互斥选择的,单击某个 RadioButton 时,设置文字的颜色;
  3. 单击“确定”“取消”或“退出”按钮时,关闭窗口,退出程序。

字体样式设置

窗体在设计模式下,选中 chkBoxUnder 组件,单击右键调出其快捷菜单。在快捷菜单中单击菜单项“Go to slot…”(中文状态为“转到槽”),出现如图 9 所示的对话框。


QcheckBox的Go to slot对话框
图 9 QcheckBox的Go to slot对话框


该对话框列出了 QCheckBox 类的所有信号,第一个是 clicked(),第二个是带一个布尔类型参数的 clicked(bool)。

信号 clicked(bool) 会将 CheckBox 组件当前的选择状态作为一个参数传递,在响应代码里可以直接利用这个传递的参数。而如果用信号 clicked(),则需要在代码里读取 CheckBox 组件的选中状态。为了简化代码,选择 clicked(bool) 信号。

选择 clicked(bool),然后单击“OK”按钮,在 QWDialog 的类定义中,会在 private slots 部分自动增加一个槽函数声明,函数名是根据发射对象及其信号名称自动命名的。

void on_chkBoxUnder_clicked(bool checked);

同时,在 qwdialog.cpp 文件中自动添加了函数 on_chkBoxUnder_clicked(bool) 的框架,在此函数中添加如下的代码,实现文本框字体下划线的控制。

void QWDialog::on_chkBoxUnder_clicked(bool checked)
{QFont font=ui->txtEdit->font();font.setUnderline(checked);ui->txtEdit->setFont(font);
}

以同样的方法为 Italic 和 Bold 两个 CheckBox设计槽函数,编译后运行,发现已经实现了修改字体的下划线、斜体、粗体属性的功能,说明信号与槽函数已经关联了。

但是,查看 QWDialog 的构造函数,构造函数只有简单的一条语句。

QWDialog::QWDialog(QWidget *parent) : QDialog(parent), ui(new Ui::QWDialog)
{ui->setupUi(this);
}

这里没有发现用 connect() 函数进行几个 CheckBox 的信号与槽函数关联的操作。这些功能是如何实现的呢?

查看编译生成的 ui_qwdialog.h 文件。构造函数里调用的 setupUi() 是在 ui_qwdialog.h 文件里实现的。查看 setupUi() 函数的内容,也没有发现用 connect() 函数进行几个 CheckBox 的信号与槽关联的操作,只是在 setupUI()里发现了如下的一条语句:

QMetaObject::connectSlotsByName(QWDialog);

秘密就在于这条语句。connectSlotsByName(QWDialog) 函数将搜索 QWDialog 界面上的所有组件,将信号与槽函数匹配的信号和槽关联起来,它假设槽函数的名称是:

void on_<object name>_<signal name>(<signal parameters>);

例如,通过 UI 设计器的操作,为 chkBoxUnder 自动生成的槽函数是:

void on_chkBoxUnder_clicked(bool checked);

它就正好是 chkBoxUnder 的信号 clicked(bool) 的槽函数。那么,connectSlotsByName() 就会将此信号和槽函数关联起来,如同执行了下面的这样一条语句:

connect(chkBoxUnder, SIGNAL(clicked (bool)),
this, SLOT (on_chkBoxUnder_clicked (bool));

这就是用 UI 设计器可视化设计某个组件的信号响应槽函数,而不用手工去将其关联起来的原因,都是在界面类的构造函数里调用 setupUi() 自动完成了关联。

字体颜色设置

设置字体的 3 个 RadioButton 是互斥性选择的,即一次只有一个 RadioButton 被选中,虽然也可以采用可视化设计的方式设计其 clicked() 信号的槽函数,但是这样就需要生成 3 个槽函数。这里可以简化设计,即设计一个槽函数,将 3 个 RadioButton 的 clicked() 信号关联到这一个槽函数。

为此,在 QWDialog 类的 private slots 部分增加一个槽函数定义如下:

void setTextFontColor();

提示 将鼠标光标移动到这个函数的函数名上面,单击右键,在弹出的快捷菜单中选择“Refactor”→“Add Definition in qwdialog.cpp”,就可以在 qwdialog.cpp 文件中自动为函数 setTextFontColor() 生成一个函数框架。

在 qwdialog.cpp 文件中,为 setTextFontColor() 编写实现代码如下:

void QWDialog::setTextFontColor()
{QPalette plet=ui->txtEdit->palette();if (ui->rBtnBlue->isChecked())plet.setColor(QPalette::Text,Qt::blue);else if (ui->rBtnRed->isChecked())plet.setColor(QPalette::Text,Qt::red);else if (ui->rBtnBlack->isChecked())plet.setColor(QPalette::Text,Qt::black);elseplet.setColor(QPalette::Text,Qt::black);ui->txtEdit->setPalette(plet);
}

由于这个槽函数是自定义的,所以不会自动与 RadioButton 的 clicked() 事件关联,此时编译后运行程序不会实现改变字体颜色的功能。需要在 QWDialog 的构造函数中手工进行关联,代码如下:

QWDialog::QWDialog(QWidget *parent) : QDialog(parent), ui(new Ui::QWDialog)
{ui->setupUi(this);connect(ui->rBtnBlue,SIGNAL(clicked()),this,SLOT(setTextFontColor()));connect(ui->rBtnRed,SIGNAL(clicked()),this,SLOT(setTextFontColor()));connect(ui->rBtnBlack,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
}

在构造函数中将 3 个 RadioButton 的 clicked() 信号与同一个槽函数 setTextFontColor() 相关联。再编译后运行,就可以更改文字的颜色了。

三个按钮的功能设计

界面上还有“确定”“取消”“退出”3 个按钮,这是在对话框中常见的按钮。“确定”表示确认选择并关闭对话框,“取消”表示取消选择并关闭对话框,“退出”则直接关闭对话框。

QWDialog 是从 QDialog 继承而来的,QDialog 提供了 accept()、reject()、close() 等槽函数来表示这三种状态,只需将按钮的 clicked() 信号与相应槽函数关联即可。

下面采用可视化的方式,将按钮的 clicked() 信号与这些槽函数关联起来。在 UI 设计器里,单击上方工具栏里的“Edit Signals/Slots”按钮,窗体进入信号与槽函数编辑状态,如图 10 所示。


窗体进入Signals/Slot编辑状态
图 10 窗体进入Signals/Slot编辑状态


将鼠标移动到“确定”按钮上方,再按下鼠标左键,移动到窗体的空白区域释放左键,这时出现如图 11 所示的关联设置对话框。


信号与槽关联编辑对话框
图 11 信号与槽关联编辑对话框


在图 11 中,左侧的列表框里显示了 btnOK 的信号,选择 clicked(),右边的列表框里显示了 QWDialog 的槽函数,选择 accept(),单击“OK”按钮。

同样的方法可以将 btnCancel 的 clicked() 信号与 QWDialog 的 reject() 槽函数关联,将 btnClose 的 clicked() 信号与 QWDialog 的 close() 槽函数关联。

注意,在图 11 的右侧列表框中没有 close() 槽函数,需要勾选下方的“Show signals and slots inherited from QWidget”才会出现 close() 函数。

设置完 3 个按钮的信号与槽关联之后,在窗体下方的 Signals 和 Slots 编辑器里也显示了这 3 个关联。实际上,可以直接在 Signals 和 Slots 编辑器进行关联设置。现在编译并运行程序,单击这 3 个按钮都会关闭程序。

那么,这 3 个按钮的信号与槽函数的关联是在哪里实现的呢?答案在 setupUi() 函数里,在 setupUi() 函数里自动增加了以下 3 行代码:

QObject::connect(btnOK, SIGNAL(clicked()), QWDialog, SLOT(accept()));
QObject::connect(btnCancel, SIGNAL(clicked()), QWDialog, SLOT(reject()));
QObject::connect(btnClose, SIGNAL(clicked()), QWDialog, SLOT(close()));

这个实例程序的功能全部完成了。采用 UI 设计器设计了窗体界面,采用可视化和程序化的方式设计槽函数,设计信号与槽函数之间的关联。

从以上的设计过程可以看到,Qt Creator 和 UI 设计器为设计应用程序提供了强大的可视化设计功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 清空或删除所有数据库表中的数据

方法一&#xff1a; --生成数据库脚本的方法最快,处理的也最好 sql2000企业管理器 --右键要清理的数据库 --所有任务 --生成SQL脚本 --<常规>里选择"生成全部对象脚本"","在脚本文件中包含说明性标题&quo…

【转】QT介绍

一、Qt介绍 Qt&#xff0c;坦白来说&#xff0c;并不只是一个界面库&#xff0c;他是C编程思想的集大成者。它是一个经过完善的C应用程序框架。使用Qt&#xff0c;在一定程度上你获得的是一个“一站式”、“全方位”的解决方案&#xff0c;STL、string、XML、数据库、网络这些…

二叉树序列化

文件的大小尽可能的小。 想了四种方法&#xff1a; 第一种方法&#xff1a;把二叉树按前序和中序遍历一遍&#xff0c;存两次二叉树。 第二种方法&#xff1a;将二叉树按左枝为0&#xff0c;右枝为1进行路径编码&#xff0c;那么每个节点都可以表示成&#xff0c;节点信息和路径…

【转】OWIN是什么?

OWIN的英文全称是Open Web Interface for .NET。 如果仅从名称上解析&#xff0c;可以得出这样的信息&#xff1a;OWIN是针对.NET平台的开放Web接口。 那Web接口是谁和谁之间的接口呢&#xff1f;是Web应用程序与Web服务器之间的接口&#xff0c;OWIN就是.NET Web应用程序与W…

java 切换panel会闪烁_【19期】为什么Java线程没有Running状态?

Java虚拟机层面所暴露给我们的状态&#xff0c;与操作系统底层的线程状态是两个不同层面的事。具体而言&#xff0c;这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态&#xff1a;什么是 RUNNABLE&#xff1f;直接看它的 Javadoc 中的说明&am…

【转】PSTools工具使用方法

转自&#xff1a;https://blog.csdn.net/hongkaihua1987/article/details/85230082 https://blog.51cto.com/winhe/1742633 本篇文章是基于pstools 2.7版本。pstools是sysinternals出的一个功能强大的nt/2k远程管理工具包。 它的主页为http://www.sysinternals.com/ 下载地址…

多标签文本分类数据集_标签感知的文档表示用于多标签文本分类(EMNLP 2019)...

原文&#xff1a;Label-Specific Document Representation for Multi-Label Text Classification&#xff08;EMNLP 2019&#xff09;多标签文本分类摘要&#xff1a;本文使用标签相关的注意力网络学习文档表示。该方法在构建文档表示时使用了标签的语义信息来决定标签和文档的…

a.pop啥意思python_python中pop什么意思

python中pop什么意思,赋值,移除,元素,位置,变量python中pop什么意思易采站长站&#xff0c;站长之家为您整理了python中pop什么意思的相关内容。python中pop()将列表指定位置的元素移除&#xff0c;同时可以将移除的元素赋值给某个变量&#xff0c;不填写位置参数则默认删除最后…

【转】CAN 通信测试工具 canutils

转自&#xff1a;https://blog.csdn.net/engrossment/article/details/105222753 概述 CAN&#xff0c;Controller Area Network&#xff0c;控制器局域网&#xff0c;一种高可靠性的现场总线。广泛用于汽车电子、工业控制通信。 canutils 工具包内含 5 个独立的程序&#x…

【转】VS技巧—任务列表Task List(ToDoList)

写代码难免有些地方需要以后修改&#xff0c;或者有些地方需要以后晚上。比如我想以后修改此函数&#xff0c;有人会使用注释来提醒自己&#xff0c;比如会写上 //zhangsantodo it is a test function //zhangsantodo it not good 然后在需要修改时全局搜索“zhangsantodo”…

哈希桶 entry_哈希表代码实现

哈希表的主要用处&#xff1a;快速的数据存储和查找。例如&#xff0c;在我们日常上网过程中搜索某条信息的时候&#xff0c;信息的存储方式决定了查找该信息的速度&#xff0c;哈希表结合了数组的便捷访问和链表的便捷查找和删除的特点。实现方式&#xff1a;通过哈希函数获取…

投标报价得分计算程序_什么是投标报价?怎么计算呢?

投标价格是投标文件中的实质性内容&#xff0c;也是评审因素中的核心内容。在招标采购活动中&#xff0c;由于投标人的疏忽&#xff0c;经常出现投标报价遗漏、书写错误、前后不一等问题。今天保标招标网小编就跟大家一起来看看什么是投标报价&#xff1f;招投标中复价是什么意…

设备I/O之OVERLAPPED

OVERLAPPED,顾名思义为重叠,乍一看会很奇怪,重叠?谁跟谁重叠?似乎在WIN32的Programming中没有这个概念呀?要讨论这个问题就要追溯到对设备I/O的访问中。 在WIN32中,用户不能象以前那样直接对硬件进行访问,使得这一层对开发者而言是个"黑盒",而提供了一组对应的API…

【转】在windows上安装VTK

看了很多教程&#xff0c;花了1天半的时间装上了&#xff0c;记录下。 前置条件&#xff1a;我安装了VS2015&#xff0c;用来编译工程。 参考资料 官方&#xff1a;http://www.vtk.org/Wiki/VTK/Building 安装&#xff1a;http://blog.csdn.net/Chinamming/article/details/1…

映射网络驱动器后为什么每次都要重新连接_如何映射网络驱动器?

有些设备的电脑需要处理一些共享资料或者需要一些外部资料才能生产运行&#xff0c;但是这些资料在本电脑没有&#xff0c;要去企业的公共盘&#xff08;共享磁盘&#xff09;里面获取&#xff0c;公共盘是网络上驱动器&#xff0c;这时候我们就要把公共盘映射到本地电脑。PCB厂…

解析 Linux 中的 VFS 文件系统机制

简介&#xff1a; 本文阐述 Linux 中的文件系统部分&#xff0c;源代码来自基于 IA32 的 2.4.20 内核。总体上说 Linux 下的文件系统主要可分为三大块&#xff1a;一是上层的文件系统的系统调用&#xff0c;二是虚拟文件系统 VFS(Virtual Filesystem Switch)&#xff0c;三是挂…

去除分页预览

有时我们在打开一个Excel表的时候,会出现如下图样式: 此为作了"分页预览"设置,取消方法如下图: 选择"普通"即可转载于:https://www.cnblogs.com/wxbbk/archive/2007/10/07/915773.html

【转】VTK + QT + VS 编译安装配置

VTK Vtk&#xff0c;&#xff08;visualization toolkit&#xff09;是一个开源的免费软件系统&#xff0c;主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的&#xff0c;它的内核是用C构建的&#xff0c;包含有大约250,000行代码&#…

用Linq转换数据

Linq的好处不用多说。由于它能Linq TO XXX&#xff0c;所以用它进行XXX数据类型之间的转换也是非常惬意的事情。 转载于:https://www.cnblogs.com/think/archive/2007/10/26/Linq1.html

【转】我的CV之路第一篇:ITK是啥?

Itk篇 &#xff08;Insight Segmentation and Registration Toolkit&#xff09;ITK Itk篇前言一、ITK是什么&#xff1f;二、一些函数 1.读/写图片2.滤波器 前言 学习医疗图像分割过程中&#xff0c;遇到了很多困难&#xff0c;英文文献&#xff0c;数学基础&#xff0c;图像…