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

QT传输函数控件设计7 边界和布局规划

我们先定义一个关于边界的类。因为我们在设计的时候,需要明确很多因素:

1.我们假设把整个针对传输函数来设计的控件都放在一个QDockWidget上,那么首先我们先构思一个DockWidget

 

这些设计以后真正设计的时候还会讲,这里提到只是为了方便说明布局。

2.在DockWidget上,我们需要定义很多控件,这些控件中的一个是之前我们看到的一个大的内部窗体结构,以及其他内部窗体结构,因为DockWidget也必须设置中心窗体(为了体现凹凸我们这里用QFrame作为中心窗体类),才能在里面设置Layout布局管理系统。我们设置好DockWidget里面的布局以后,我们再在里面添加一个Widget窗体控件,用来做显示的,名叫TsfunWidget。其他窗体以后我们想添加再添加就行了,示意图随便画了两个

3. 在TsfunWidget中,我们设置一个显示区QGraphicsView类,名叫TsfunView。这个显示区设置一个最小值,防止显示地太小。因为TsWidget里面只有这么一个对象,所以它会占满整个显示区:

4. 之后,要在view里面显示一些东西,我们要在底层留下一定的空间,大概120左右就行。然后设置坐标系。

里面的绿色框是坐标轴显示区,然后底下remained区域是用来预留的,这里设置为120就行了。其实我们也可以把Bottom和remained设置为一个常量,因为Bottom是显示横坐标的区域,大小和remained区域一样都不变。

我们设置区域的QT类:

#ifndef _MARGIN_H__
#define _MARGIN_H__

#include <QObject>

class Margin : public QObject {
	Q_OBJECT
		
public:
	Margin(int l_x,int r_x,int t_y, int b_y , QObject * parent = Q_NULLPTR);
	~Margin();

	Margin& operator = (const Margin& Other) {
		left = Other.left;
		right = Other.right;
		top = Other.top;
		bottom = Other.bottom;
		return *this;
	}
	Margin(const Margin& Other)
	{
		*this = Other;
	};

	int leftToBoundary() {
		return left;
	}
	int rightToBoundary() {
		return right;
	}
	int topToBoundary() {
		return top;
	}
	int bottomToBoundary() {
		return bottom;
	}
	void setRightToBoundary(int r) {
		right = r;
	}
	void setBottomToBoundary(int b) {
		bottom = b;
	}

private:
	int left;
	int right;
	int top;
	int bottom;
};

#endif

这里其实很简单,就是设置四个边界距离就好了。在cpp文件里:

#include "margin.hpp"

Margin::Margin(int l_x, int r_x, int t_y, int b_y,QObject * parent) : QObject(parent) {
	right = r_x;
	left = l_x;
	top = t_y;
	bottom = b_y;
}

Margin::~Margin() {
	
}

这样,我们的边界就设置好了,以后我们都使用这个边界类来给物体划定边界点。

相关文章:

  • QT传输函数控件设计8 设计小圆点
  • QT传输函数控件设计9 初步设计视口类
  • QT传输函数控件设计10 包含小圆点的图形项
  • QT传输函数控件设计11 包含小圆点的图形项2
  • QT传输函数控件设计12 自定义信号和槽
  • QT传输函数控件设计13 大结局
  • QT三维图形1
  • QT三维图形2
  • QT三维图形3
  • QT三维图形4
  • icache的方面以及使用
  • cmp bne 以及sub指令的详解
  • 关于ARM Cortex a 系列的看门狗定时器
  • C语言之 认识可变参数
  • ARM cortex a 的SDRAM (DDR)
  • hexo+github搭建个人博客
  • [case10]使用RSQL实现端到端的动态查询
  • 2017 年终总结 —— 在路上
  • 78. Subsets
  • ComponentOne 2017 V2版本正式发布
  • CSS居中完全指南——构建CSS居中决策树
  • Django 博客开发教程 8 - 博客文章详情页
  • docker-consul
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • React中的“虫洞”——Context
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • session共享问题解决方案
  • VUE es6技巧写法(持续更新中~~~)
  • 彻底搞懂浏览器Event-loop
  • 高程读书笔记 第六章 面向对象程序设计
  • 如何设计一个比特币钱包服务
  • 入口文件开始,分析Vue源码实现
  • 算法系列——算法入门之递归分而治之思想的实现
  • 突破自己的技术思维
  • Spring第一个helloWorld
  • ​插件化DPI在商用WIFI中的价值
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #AngularJS#$sce.trustAsResourceUrl
  • #考研#计算机文化知识1(局域网及网络互联)
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (arch)linux 转换文件编码格式
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • ****Linux下Mysql的安装和配置
  • .net core使用ef 6
  • .NetCore部署微服务(二)
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @Mapper作用