Qt常用类型使用总结-QImage类、QString类、Qvariant类、QDateTime类、QSplashScreen类等

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类型

举例如下:
列1:读写英文变量值

#include <QSettings>
#include <QApplication>
QSettings config(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();

列2:Qt的ini配置文件默认不支持直接读写中文,需要手动设置下编码格式才行,强烈建议统一用utf-8编码,包括代码文件。举例如下:

//设置了编码以后配置文件内容为 Company=上海物联网技术研究中心
//没有设置编码则配置文件内容为Company=\xe4\xb8\x8a\xe6\xb5\xb7\xe7\x89\xa9\xe8\x81\x94\xe7\xbd\x91\xe6\x8a\x80\xe6\x9c\xaf\xe7\xa0\x94\xe7\xa9\xb6\xe4\xb8\xad\xe5\xbf\x83
void App::readConfig()
{
   
    QSettings set(App::ConfigFile, QSettings::IniFormat);
    set.setIniCodec("utf-8");

    set.beginGroup("AppConfig1");
    App::Company = set.value("Company", App::Company).toString();
    set.endGroup();
}
void App::writeConfig()
{
   
    QSettings set(App::ConfigFile, QSettings::IniFormat);
    set.setIniCodec("utf-8");

    set.beginGroup("AppConfig1");
    set.setValue("Company", App::Company);
    set.endGroup();
}

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值