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() {
}
这样,我们的边界就设置好了,以后我们都使用这个边界类来给物体划定边界点。