在介绍内容之前,先说明一下开发环境,如下图:
Qt版本:Qt5.3.2;
Qt开发工具:Qt Creater 3.2.1;
Qt构建工具:Desktop Qt 5.3 MinGW 32bit;
Qt开发平台:Windows 7 64bit。
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中的应用程序输出窗口看到输出结果了。