Qt常用类型使用总结

发布于:2024-07-11 ⋅ 阅读:(5) ⋅ 点赞:(0)

Qt常用类型使用总结

QImage类

颜色索引模式:在一张图片的每个像素中可以直接存放其rgb值!当然:我们也可以存放一个索引值,通过这个索引值去其对应的颜色表中去查找对应的颜色的rgb值来进行绘制。这种像素中存放索引值而不是实际rgb值的模式在Qt中有:QImage::Format_Indexed8,亦即:用8位来存放一个索引值。

灰度索引图:对于8阶灰度图而言,由于其一共有256种灰度,所以我们可以设计一个颜色表:里边存放256个rgb值!每个rgb值的三个分量都是相等的。这样:这张表就可以用来表示所有的灰度!而灰度索引图中存放的是各个整数索引值,这些图片数据本身是无法显示的,因为其没有实际的rgb值。当实际构图时:是用该索引值在上边创建的颜色表中进行查找,找到对应的灰度rgb值,而后才能进行实际的绘图等操作。

常用函数如下:
const uchar *QImage::constBits() const;//返回指向第一个像素数据的指针。请注意,QImage使用隐式数据共享,但此函数不执行共享像素数据的深度复制,因为返回的数据是常量。

const uchar *QImage::constScanLine(int i) const;//返回索引为i的扫描线处的像素数据指针。第一条扫描线位于索引0处。

void QImage::setColorCount(int colorCount);//调整颜色表的大小以包含colorCount个条目,如果颜色表是可扩展的,所有额外颜色将设置为透明(即qRgba(0,0,0,0))。使用图像时,颜色表必须足够大,以包含图像中所有像素/索引值的条目,否则结果将无法定义。

void QImage::setColor(int index, QRgb colorValue);//将颜色表中给定索引处的颜色设置为给定的colorValue,colorValue是一个ARGB四元组。如果索引超出颜色表的当前大小,则会使用 setColorCount()函数扩展。

举例:将QImage::Format_Indexed8的灰度图像进行保存为“1.bmp”格式

QImage mImage((uchar*)info.data(),width,height,(width+3)/4*4,QImage::Format_Indexed8);
if(mImage.depth() == 8)
{
   
	mImage.setColorCount(256);
	for(int i = 0;i < 256; i++)
	{
   
		mImage.setColor(i,qRgb(i,i,i));
	}
}
mImage.save("1.bmp","bmp");

QSetting类

QSetting类是可以对ini文件完成写入和读取,用于保存程序的常用参数。
常用的函数如下:
QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr);//构造函数,fileName为文件名,format为IniFormat时表明为ini文件。

void setValue(const QString &key, const QVariant &value);//设置数据函数

QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;//获取key,返回值是QVariant类型

举例如下:

#include <QSettings>
#include <QApplication>
QSettings config = QSettings(QApplication::applicationDirPath() + "/config/config.ini",QSettings::IniFormat);

//设置数据
config .setValue("/white/leftX1",leftX1Value);
config .setValue("/white/leftY1",leftY1Value);

//读取数据
int leftX1 = config .value("/white/leftX1").toInt();
int leftY1 = config .value("/white/leftY1").toInt();

QByteArray类型

在Qt中QByteArray可以看做是c语言中 char*的升级版本。我们在使用这种类型的时候可通过这个类的构造函数申请一块动态内存,用于存储我们需要处理的字符串数据。

常用的函数如下:

构造函数如下:

// 构造空对象, 里边没有数据
QByteArray::QByteArray();
// 将data中的size个字符进行构造, 得到一个字节数组对象
// 如果 size==-1 函数内部自动计算字符串长度, 计算方式为: strlen(data)
QByteArray::QByteArray(const char *data, int size = -1);
// 构造一个长度为size个字节, 并且每个字节值都为ch的字节数组
QByteArray::QByteArray(int size, char ch);

数据操作函数如下:

// 在尾部追加数据
// 其他重载的同名函数可参考Qt帮助文档, 此处略
QByteArray &QByteArray::append(const QByteArray &ba);
void QByteArray::push_back(const QByteArray &other);

// 头部添加数据
// 其他重载的同名函数可参考Qt帮助文档, 此处略
QByteArray &QByteArray::prepend(const QByteArray &ba);
void QByteArray::push_front(const QByteArray &other);

// 插入数据, 将ba插入到数组第 i 个字节的位置(从0开始)
// 其他重载的同名函数可参考Qt帮助文档, 此处略
QByteArray &QByteArray::insert(int i, const QByteArray &ba);

// 删除数据
// 从大字符串中删除len个字符, 从第pos个字符的位置开始删除
QByteArray &QByteArray::remove(int pos, int len);
// 从字符数组的尾部删除 n 个字节
void QByteArray::chop(int n);
// 从字节数组的 pos 位置将数组截断 (前边部分留下, 后边部分被删除)
void QByteArray::truncate(int pos);
// 将对象中的数据清空, 使其为null
void QByteArray::clear();

// 字符串替换
// 将字节数组中的 子字符串 before 替换为 after
// 其他重载的同名函数可参考Qt帮助文档, 此处略
QByteArray &QByteArray::replace(const QByteArray &before, const QByteArray &after);

子字符串查找和判断函数如下:

// 判断字节数组中是否包含子字符串 ba, 包含返回true, 否则返回false
bool QByteArray::contains(const QByteArray &ba