0018:Qt常用类 - QSize

1 开发环境

在介绍内容之前,先说明一下开发环境,如下图:
0018:Qt常用类 - QSize_第1张图片0018:Qt常用类 - QSize_第2张图片
Qt版本:Qt5.3.2;
Qt开发工具:Qt Creater 3.2.1;
Qt构建工具:Desktop Qt 5.3 MinGW 32bit;
Qt开发平台:Windows 7 64bit。

2 QSize

QSize类使用整型值定义了一个二维对象的尺寸,即:宽和高。首先,将QSize中的常用接口整理出来,分为成员函数和友元函数,这样方便学习和理解。

//
//成员函数
//
QSize();
QSize(int width, int height);
bool             isEmpty();                                      //w或h: <=0, true; otherwise, false;
bool             isNull();                                       //w且h: ==0, true; otherwise, false;
bool             isValid();                                      //w且h: >=0, true; otherwise, false;

void             setWidth(int width);                            //设置宽度
void             setHeight(int height);                          //设置高度
int              width() const;                                  //获得宽度
int              height() const;                                 //获得高度
int &            rwidth();                                       //获得宽度引用
int &            rheight();                                      //获得高度引用

void             transpose();                                    //交换宽度和高度,改变QSize自身
QSize            transposed() const;                             //交换宽度和高度,不改变QSize自身
void             scale(int width, int height, Qt::AspectRatioMode);//缩放,改变QSize自身
void             scale(QSize size, Qt::AspectRatioMode);         //缩放,改变QSize自身
QSize            scaled(int width, int height, Qt::AspectRatioMode);//缩放,不改变QSize自身
QSize            scaled(QSize size, Qt::AspectRatioMode);        //缩放,不改变QSize自身
QSize            boundedTo(const QSize &otherSize) const;        //返回自身和参数比较后结合起来的最小尺寸
QSize            expandedTo(const QSize &otherSize) const;       //返回自身和参数比较后结合起来的最大尺寸

QSize &          operator*=(qreal factor);                       //乘赋值
QSize &          operator+=(const QSize &size);                  //加赋值
QSize &          operator-=(const QSize &size);                  //减赋值
QSize &          operator/=(qreal divisor);                      //除赋值

//
//友元函数
//
bool             operator!=(const QSize &s1, const QSize &s2);
bool             operator==(const QSize &s1, const QSize &s2);
const QSize      operator*(const QSize &size, qreal factor);
const QSize      operator*(qreal factor, const QSize &size);
const QSize      operator+(const QSize &s1, const QSize &s2);
const QSize      operator-(const QSize &s1, const QSize &s2);
const QSize      operator/(const QSize &size, qreal divisor);

下面,是上述接口的使用例程,其中有些接口与《0017:Qt常用类 - QPoint》中的使用方法一样,当下面代码中提到需要参考QPoint中的代码时,可以点击链接参考。

//
//成员函数
//
//QSize();
//QSize(int width, int height);
//bool             isEmpty();                                      //w或h: <=0, true; otherwise, false;
//bool             isNull();                                       //w且h: ==0, true; otherwise, false;
//bool             isValid();                                      //w且h: >=0, true; otherwise, false;
/*
 * 判断一个QSize是否可用,应使用isEmpty(), 即:
 * if (!isEmpty())
 * {
 *     //说明w>0且h>0,所以QSize可用...
 * }
 */
QSize szEmpty1(-1, 1), szEmpty2(-1, 0), szEmpty3(0, -1), szEmpty4(1, -1);
QSize szInvalid;
QSize szValid1(0, 0), szValid2(10, 20);
qDebug("szEmpty1 is empty? %s.", szEmpty1.isEmpty() ? "yes" : "no");
qDebug("szEmpty2 is empty? %s.", szEmpty2.isEmpty() ? "yes" : "no");
qDebug("szEmpty3 is empty? %s.", szEmpty3.isEmpty() ? "yes" : "no");
qDebug("szEmpty4 is empty? %s.", szEmpty4.isEmpty() ? "yes" : "no");
qDebug("szInvalid = (%d, %d).", szInvalid.width(), szInvalid.height());
qDebug("szInvalid is empty? %s.", szInvalid.isEmpty() ? "yes" : "no");
qDebug("szInvalid is valid? %s.", szInvalid.isValid() ? "yes" : "no");
qDebug("szValid1 is valid? %s.", szValid1.isValid() ? "yes" : "no");
qDebug("szValid2 is valid? %s.", szValid2.isValid() ? "yes" : "no");

//void             transpose();                                    //交换宽度和高度,改变QSize自身
//QSize            transposed() const;                             //交换宽度和高度,不改变QSize自身
QSize szTranspose(10, 20);
szTranspose.transpose();
qDebug("transpose: szTranspose = (%d, %d).", szTranspose.width(), szTranspose.height());
qDebug("transposed: same to transpose...");

//void             setWidth(int width);                            //设置宽度
//void             setHeight(int height);                          //设置高度
//int              width() const;                                  //获得宽度
//int              height() const;                                 //获得高度
//int &            rwidth();                                       //获得宽度引用
//int &            rheight();                                      //获得高度引用
qDebug("setWidth and setHeight: ...");
qDebug("width and height: ...");
qDebug("rwidth and rheight: ...");

//void             scale(int width, int height, Qt::AspectRatioMode);
//void             scale(QSize size, Qt::AspectRatioMode);
//QSize            scaled(int width, int height, Qt::AspectRatioMode);
//QSize            scaled(QSize size, Qt::AspectRatioMode);
/*
 * QSize t1(10, 12);
 * t1.scale(60, 60, Qt::IgnoreAspectRatio);
 * -- t1 is (60, 60)
 * -- 宽度和高度都缩放到参数尺寸

 * QSize t2(10, 12);
 * t2.scale(60, 60, Qt::KeepAspectRatio);
 * -- t2 is (50, 60)
 * -- 缩放到尺寸刚好<=参数的尺寸

 * QSize t3(10, 12);
 * t3.scale(60, 60, Qt::KeepAspectRatioByExpanding);
 * -- t3 is (60, 72)
 * -- 缩放到刚好>=参数的尺寸
 */
qDebug("scale or scaled: 参考上述注释的例程...");

//QSize            boundedTo(const QSize &otherSize) const;
/*
 * 宽为自身宽与参数宽中的最小值, 高为自身高与参数高中的最小值
 * QSize s;
 * QSize s1(10, 30);
 * QSize s2(30, 10);
 * s = s1.boundedTo(s2);
 * -- s: (10, 10)
 */
qDebug("boundedTo: 参考上述注释的例程...");

//QSize            expandedTo(const QSize &otherSize) const;
/*
 * 宽为自身宽与参数宽中的最大值, 高为自身高与参数高中的最大值
 * QSize s;
 * QSize s1(10, 30);
 * QSize s2(30, 10);
 * s = s1.expandedTo(s2);
 * -- s: (30, 30)
 */
qDebug("expandedTo: 参考上述注释的例程...");

//QSize &          operator*=(qreal factor);                       //乘赋值
//QSize &          operator+=(const QSize &size);                 //加赋值
//QSize &          operator-=(const QSize &size);                 //减赋值
//QSize &          operator/=(qreal divisor);                      //除赋值
qDebug("操作符重载: 参考QPoint的相似函数");

//
//友元函数
//
//bool             operator!=(const QSize &s1, const QSize &s2);
//bool             operator==(const QSize &s1, const QSize &s2);
//const QSize      operator*(const QSize &size, qreal factor);
//const QSize      operator*(qreal factor, const QSize &size);
//const QSize      operator+(const QSize &s1, const QSize &s2);
//const QSize      operator-(const QSize &s1, const QSize &s2);
//const QSize      operator/(const QSize &size, qreal divisor);
qDebug("操作符重载(友元函数): 参考QPoint的相似函数.\n\
注意QSize的'+'/'-'不是QPoint的取正/取负操作,而是两个QSize的加/减操作.");

在学习过程中,可以将上述代码放到一个按钮的响应函数中,以调试方式运行,就可以在Qt Creater中的应用程序输出窗口看到输出结果了。

你可能感兴趣的:(Qt,我的QT学习历程,Qt,Qt,Creater,QPoint,QSize,友元函数)