QRect,resizeEvent,QPoint,QDir,QSetting学习,《转》

时间:2019。04。23。地点:武汉 天气:晴

1.QRect

该类在一个平面定义一个矩形,使用整数的精度。
#include
公共函数:
QRect () QRect ( const QPoint & topLeft, const QPoint & bottomRight )
QRect ( const QPoint & topLeft, const QSize & size )
QRect ( int x, int y, int width, int height )void adjust ( int dx1, int dy1, int dx2, int dy2 )QRect adjusted ( int dx1, int dy1, int dx2, int dy2 ) const
int bottom () constQPoint bottomLeft () constQPoint bottomRight () constQPoint center () constbool contains ( const QPoint & point, bool proper = false ) const
bool contains ( int x, int y, bool proper ) constbool contains ( int x, int y ) constbool contains ( const QRect & rectangle, bool proper = false ) const
void getCoords ( int * x1, int * y1, int * x2, int * y2 ) const
void getRect ( int * x, int * y, int * width, int * height ) const
int height () constQRect intersected ( const QRect & rectangle ) constbool intersects ( const QRect & rectangle ) constbool isEmpty () constbool isNull () constbool isValid () constint left () constvoid moveBottom ( int y )void moveBottomLeft ( const QPoint & position )void moveBottomRight ( const QPoint & position )
void moveCenter ( const QPoint & position )void moveLeft ( int x )void moveRight ( int x )void moveTo ( int x, int y )void moveTo ( const QPoint & position )void moveTop ( int y )void moveTopLeft ( const QPoint & position )void moveTopRight ( const QPoint & position )QRect normalized () constint right () constvoid setBottom ( int y )void setBottomLeft ( const QPoint & position )void setBottomRight ( const QPoint & position )void setCoords ( int x1, int y1, int x2, int y2 )void setHeight ( int height )void setLeft ( int x )void setRect ( int x, int y, int width, int height )void setRight ( int x )void setSize ( const QSize & size )void setTop ( int y )void setTopLeft ( const QPoint & position )void setTopRight ( const QPoint & position )void setWidth ( int width )void setX ( int x )void setY ( int y )QSize size () constint top () constQPoint topLeft () constQPoint topRight () constvoid translate ( int dx, int dy )void translate ( const QPoint & offset )QRect translated ( int dx, int dy ) constQRect translated ( const QPoint & offset ) constQRect united ( const QRect & rectangle ) constint width () constint x () constint y () constQRect operator& ( const QRect & rectangle ) constQRect & operator&= ( const QRect & rectangle )QRect operator| ( const QRect & rectangle ) constQRect & operator|= ( const QRect & rectangle )相关的非成员:
bool operator!= ( const QRect & r1, const QRect & r2 )
QDataStream & operator<< ( QDataStream & stream, const QRect & rectangle )
bool operator== ( const QRect & r1, const QRect & r2 )
QDataStream & operator>> ( QDataStream & stream, QRect & rectangle )
详细描述:
一个矩形通常被表达作为一个左上角和一个大小。这个大小(宽度和高度)总是相等的对于数学上的矩形。
一个QRect能被构建用一套左、上、宽、高数值,或者构造一个QPoint和一个QSize。下面的代码产生两个一样的矩形。
QRect r1(100, 200, 11, 16);
QRect r2(QPoint(100, 200), QSize(11, 16));
有第三种方法,构造一个QRect使用上-左 和 底-右 协调,但是我们推荐你避免使用它。理由是从历史原因,这个值返回从bottom()和right()函数,而这两个函数偏离真正的bottom-right角。
QRect类提供一个函数集合,返回各种矩形的坐标,使能处理这些。QRect也提供函数改变矩形的各个坐标值。此外有一个moveto()函数,它移动矩形,把他的左上角放到被给的坐标。可替代的,translate()函数移动矩形被给的偏移量到目前的位置,translate()函数返回一个这个矩形的传输拷贝。
Size()函数返回矩形的尺寸作为一个QSize()。这个尺寸也能被单个的找回,使用width()和height()。使用函数setSize()\ setWidth()\ setHeight() 操作尺寸。 可替代的,大小能被改变通过应用函数设置矩形的坐标,例如setBottom()和setRight()
这个contains()函数告诉是否一个被给的点在矩形内部,intersects()函数返回true,如果这个矩形交叉和一个被给的矩形。QRect类也提供intersected()函数,它返回交叉矩形的合集。United()函数返回相交矩形的并集。
isEmpty()函数返回true如果left()>right()或者top()>bottom().注意一个空的矩形是无效的。isValid()函数返回true,如果left()<=right()并且top()<=bottom().一个空的矩形(isNull()==true)在其他的手上,宽和高都是0.
注意:由于QRect和QRectF被定义,一个空的QRect被定义用相同的方法作为QRectF。
最后,QRect对象能被流动也被比较。
翻译(rendering):
当使用一个平滑处理的painter时,一个QRect的边界行将被系统找回矩形的两边。但是当使用一个锯齿painter时其他的规则应用。
当用两个像素宽的笔翻译时,边界行将被撕碎在中间被数学矩形。这个将是一种情况,当画笔被设置一个偶数时。当找回用一只笔和奇数时。空格像素将被找回到右-下,数学矩形也在一个像素情况。
坐标
QRect类提供一个函数集合返回各种矩形坐标,使能操作这些。QRect也提供函数来移动矩形通过各种坐标。
例如left()和setLeft()和moveLeft()函数。Left()函数返回矩形左边缘的x坐标。setLeft()函数也设置矩形的左边缘被给的x坐标(他可能改变宽度,但是将绝不改变矩形的右边缘),moveLeft()移动整个矩形水平地,把矩形的左边拖到被给的x坐标,它的大小不改变。
注意:从历史原因,返回值从bottom()和right()函数偏离从正确的右下脚。Right()函数返回left()+width()-1和bottom()函数返回top()+height()-1。同样的情况发生子啊从bottomRight()函数返回的点。另外,topRight()和bottomLeft()函数的x和y坐标,各自地,包含同样的偏离与真正的右边和底边。
我们推荐使用x()+width()和y()+height()来找到真正的右下角。避免right()和bottom()。另一个解决办法是使用QRectF。QRectF类定义一个矩形在一个平面,使用浮点数的点作为坐标。QRectF::right()和QRectF::bottom()函数返回右边和底部坐标。
那也是可能的增加偏移量到矩形的坐标,使用adjust()函数,也获得一个新的矩形,在对原来的矩形使用函数adjusted()之后得到的。如果宽或者高一个是负值,使用normalized()函数来重新获得一个矩形,哪里边角被交换。
此外,QRect提供getCoords()函数,它提取矩形的左上角和右下角的位置。getRect()函数,它提取矩形的左上角、宽和高。使用setCoords()和setRect()函数来操作矩形的坐标和尺寸。
也看QRectF和QRegion。
成员函数文件:
QRect::QRect ()
构造一个空的矩形。
QRect::QRect ( const QPoint & topLeft, const QPoint & bottomRight )
构造一个矩形用被给的左上和右下角。
QRect::QRect ( const QPoint & topLeft, const QSize & size )
构造一个矩形用被给的左上角和尺寸。
QRect::QRect ( int x, int y, int width, int height )
构造一个矩形用被给的(x,y)作为他的左上角和被给的宽度和高度
void QRect::adjust ( int dx1, int dy1, int dx2, int dy2 )
增加dx1,dy1,dx2,dy2各自地到矩形存在的坐标。
QRect QRect::adjusted ( int dx1, int dy1, int dx2, int dy2 ) const
返回一个新的矩形用dx1,dy1,dx2,dy2
int QRect::bottom () const
返回矩形的下边的y坐标
注意从历史原因,这个函数返回top()+height()-1;使用y()+height()来重获真正的y坐标
QPoint QRect::bottomLeft () const
返回矩形左下角的坐标。注意由于历史原因,这个函数返回QPoint(left(),top()+height()-1)
QPoint QRect::bottomRight () const
返回矩形的右下角的位置。
注意由于历史原因,这个函数返回QPoint(left() + width() -1, top() + height() - 1).
QPoint QRect::center () const
返回矩形的中心点。
bool QRect::contains ( const QPoint & point, bool proper = false ) const
如果被给的点在矩形内部或者边缘上,返回true。否则返回错。如果参数proper是true,这个函数返回true,只用当被给的点是在矩形的内部(不在边上)。
bool QRect::contains ( int x, int y, bool proper ) const
这是一个重载函数。
返回true,如果点(x,y)是在矩形的内部或者边缘上。否则返回false。同上
bool QRect::contains ( int x, int y ) const
这也是一个重载函数
如果点(x,y)在矩形内部,返回true,否则返回false
bool QRect::contains ( const QRect & rectangle, bool proper = false ) const
这是一个重载函数。同上
void QRect::getCoords ( int * x1, int * y1, int * x2, int * y2 ) const
获取矩形的左上角位置到x1和y1,并且右下角的位置到x2、y2
void QRect::getRect ( int * x, int * y, int * width, int * height ) const
获取矩形的左上角位置到x、y,并且它的尺寸到width和heigth
int QRect::height () const
返回高
QRect QRect::intersected ( const QRect & rectangle ) const
返回两个矩形的交集。
bool QRect::intersects ( const QRect & rectangle ) const
如果矩形相交返回true。
这个交集能被获得通过intersected()函数。
例子:
void rect::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QRect rect(10,10,200,100);//左上角坐标,横长,竖宽

//填充颜色和样式

// painter.fillRect(rect,Qt::Dense1Pattern);//单独设置样式
// QBrush brush(Qt::blue);//单独设置颜色
QBrush brush(Qt::blue,Qt::Dense1Pattern);
painter.fillRect(rect,brush);

 //边框颜色设置
QPen pen(Qt::yellow);
pen.setWidth(3);//粗细
painter.setPen(pen);
painter.drawRect(rect);

}

2.Qt resizeEvent 控件居中设置

在Qt中我们有时需要让一个控件在窗口居中或是在父控件中居中,而且在窗口拉伸时仍然保持正中央的位置。这里介绍一种方法,用到了主窗口的响应函数resizeEvent(QResizeEvent* event),这个响应函数在窗口的大小改变时会自动调用,该函数如下:

void MainWindow::resizeEvent(QResizeEvent* event)
{
QMainWindow::resizeEvent(event);
// Your code here
}

需要注意的是,在主程序窗口生成时,会首先调用下这个函数,这个函数可以返回主窗口的大小,但是不能准确的返回上面的控件的大小,这可能是个bug,所以我们如果想要找到上面的一个控件的正中间的位置,需要根据主窗口的大小的值来定位中间控件的中心。

复制代码
void MainWindow::resizeEvent(QResizeEvent* event)
{
QMainWindow::resizeEvent(event);
// Your code here
int width = ui->centralWidget->width(), height = ui->centralWidget->height();
ui->item->move(width * 0.25 - 80, (height - 320) / 2 - 8);
ui->item->move(width * 0.25 - 80, (height - 320) / 2 - 8);
}

3.QPoint

QPoint 类代表一个坐标点,实现在 QtCore 共享库中。它可以认为是一个整型的横坐标和一个整型的纵坐标的组合。

构造

QPoint 类支持以下两种构造方式:

QPoint(); // 构造横纵坐标均为 0 的 QPoint 对象
QPoint(int x, int y); // 构造横纵坐标分别为 x 和 y 的 QPont 对象

4.QDir

QDir类提供了访问系统目录结构及其内容的与平台无关的方式。

头文件:#include <qdir.h>

QDir类用来操作路径名及底层文件系统,获取关于目录路径及文件的相关信息,也可以用来获取Qt资源系统的文件信息。
QDir类使用相对或绝对文件路径来指向一个文件/目录。
绝对路径是从目录分隔符“/”或者带有一个驱动器标识(除了在Unix下)。
如果总是使用“/”作为目录分隔符,Qt将会把你的路径转化为符合底层的操作系统的。
相对文件名是由一个目录名称或者文件名开始并且指定一个相对于当前路径的路径。
绝对路径示例:
QDir("/home/user/Document")
其中第二个路径是Windows系统下,它指向的路径是:C:\Documents and Secctings。
相对路径示例:
QDir(“image/yu.png”)

注意当前路径是指应用程序的工作目录,而QDir自己的路径可以通过setPath()设置并且通过path()获得。
可以使用QDir类的方法isRelative()或者是isAbsolute()来判断QDir指向的路径是相对路径还是绝对路径,如果是相对路径,可使用方法makeAbsolute()将相对路径转换为绝对路径。

  1. 目录及导航操作
    QDir类对象所关联的目录路径可以使用path()函数获得,可以使用setPath()方法来设置新的路径;

可以使用方法absolutePath()来获得目录的绝对路径。

目录名可以使用dirName()方法来获得,该方法返回绝对路径中的最后一个项目,即目录名,但如果QDir关联的是当前工作目录,则返回"."。

可以使用mkdir()方法来创建一个目录;
使用rename()方法来对关联目录进行重命名;
使用rmdir()方法来移除一个目录;
使用exists()方法检测目录是否存在;
使用refresh()方法来刷新目录内容。
其余方法详见QDir类的API文档。

  1. 文件及目录内容
    文件系统中目录中一般包括文件、子目录及符号链接;

可以使用count()方法来获得QDir类对象关联的目录中的条目数目;
可以使用entryList()获取所有条目的名称;
可以使用entryInfoList()来获取条目的QFileInfo内容。
可以使用filePath()及absoluteFilePath()来获得QDir中指定文件的路径名,但这两个函数均不检查指定的文件是否存在;
可以使用remove()方法来删除指定文件;
可以使用过滤器来获取指定类型的文件,当文件符合过滤器指定条件时被保留;
过滤器中的内容实际上是一个stringList。

  1. 当前目录及其他特定路径
    可以使用一些静态函数来访问指定的路径,这些函数返回一个QDir对象:

可以使用静态函数setCurrent()来设置应用程序的工作路径。

5.QSetting

1、读写配置文件。

代码如下:

复制代码
//创建配置文件

QSettings iniFile(QCoreApplication::applicationDirPath()+"/test.ini", QSettings::IniFormat);    //参数1,代表新建ini文件的位置的绝对路径; 参数2,将设置存储在ini文件中

//写入数据

iniFile.setValue("/setting/value1", 1);

iniFile.setValue("/setting/value2", 2);

setting.beginGroup("/setting");  //切换到setting组之下

iniFile.setValue(“value3”, 3);

setting.endGroup();      //关闭切换分组

//读取数据
QStringList all = setting.childGroups();    //从配置文件中读取所有的分组
setting.beginGroup("/setting");
QString value1=setting.value("/setting/value1").toString();
setting.beginGroup("/setting");
QString value2=setting.value(“value2”).toString();
setting.endGroup();
复制代码
test.ini中的数据格式如下:
[setting]

value1=1

value2=2

value3=3
注意:因为QVariant是不会提供所有数据类型的转化的,比如有toInt(),toPoint(),toSize(),但却没有对Qcolor,Qimage和Qpixmap等数据类型的转化,此时可以用QVariant.value(); QSettings是可重入的,意味着可以同时在不同的线程中使用不同的QSettings对象

若key所对应的value是int型的,也可以toInt(),若没有要找的key,如果用返回0。

1.pos= setting.value(“pos”, QVariant(QPoint(200, 200))).toPoint();
2.size= setting.value(“size”, QVariant(QSize(400, 400))).toSize();
contains() 判断一个指定的键是否存在
remove() 删除相关的键
allKeys() 获取所有键
clear() 删除所有键
注意:解决value读写的中文乱码问题,添加代码setting.setIniCodec(“GBK”)或者setting.setIniCodec(QTextCodec::codecForName(“GB2312”));即可。 目前还未解决其键值的中文乱码问题。

6.智能变电站测试中的SV/SMV是什么?

SV/SMV是采样值,就是电压电流波形的采样值智能变电站中,合并单元将这些采样值封装成SV数据包并发送出去,给保护装置和其他间隔层装置使用,数据包的常见格式有9-1/9-2/FT3等,如致远电子DT6000S智能变电站光数字测试仪中的SMV接收就有9-1/9-2和FT3两种数据格式的检测分析。

7.GOOSE

面向通用对象的变电站事件 [1] ( GOOSE—Generic Object Oriented Substation Event) 是IEC 61850标准中用于满足变电站自动化系统快速报文需求的机制。主要用于实现在多IED 之间的信息传递,包括传输跳合闸信号(命令),具有高传输成功概率。基于GOOSE网络传输代替传统的硬接线实现开关位置、闭锁信号和跳闸命令等实时信息的可靠传输。(相当于传统保护的开入开出回路)
其在过程层应用的可靠性、实时性、安全性能满足继电保护的要求,主要依赖于各智能设备的通信处理能力以及GOOSE网络的组网方案。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值