QT学习笔记
explicit与implicit之间的关联与区别
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)
显示声明与隐式声明的区别是什么?
- 没有使用explicit关键字的类声明,即默认为隐式声明
- explicit取消了隐式转换,举例
- explicit关键字的作用就是防止类构造函数的隐式自动转换
- 只对一个参数的构造函数有效,如果构造函数参数大于等于两个是,是不会产生隐式转换的,因此该关键字也就无效了。
- 当除了第一个参数意外的其他参数都有默认值的时候,explicit关键字依然有效。此时, 当调用构造函数时只传入一个参数, 等效于只有一个参数的类构造函数。
class cString
{
public:
int size;
cString(int size)
{
this.size = size;
}
}
如下调用:
cString str1(12); //可以调用
cString str2 = 10; //也是可以的,这时候系统会隐式转换,将其转化为cString str2(10);进行调用
//但是此写法容易引起歧义,因此在构造函数前加上explicit修饰,可以避免此写法的产生
QDomElement类
QT中实现对xml读写操作的类是QDomDocument相关的类,一般包括下列三个头文件
QFile
QtXml\QtXml
QtXml\QDomDocument
写xml常用函数
QDomDocument doc;
QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);
QDomElement root = doc.createElement("HInfoData");//创建根节点
doc.appendChild(root);//添加根节点
QDomElement strMac = doc.createElement("Mac");//创建元素节点
root.appendChild(strMac);//添加元素节点到根节点
QDomText strMacNodeText = doc.createTextNode(data._strMac);//创建元素文本
strMac.appendChild(strMacNodeText);//添加元素文本到元素节点
保存XML文件
QFile file("./test.xml");
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text))
return false;
QTextStream out(&file);
out.setCodec("UTF-8");
doc.save(out, 4, QDomNode::EncodingFromTextStream);
file.close();
读xml文件
QDomDocument doc;
QFile file("./test.xml");
if (!file.open(QIODevice::ReadOnly))
{
return false;
}
if (!doc.setContent(&file))
{
file.close();
return false;
}
file.close();
QFileInfo类–文件信息类
QFileInfo类提供与系统无关的文件信息,QFileInfo提供了关于文件的名称和在文件系统中的位置(路径)、它的访问权限以及它是目录还是符号链接等信息。文件的大小和最后修改/读取时间也可用。
常用方法
1.如果该对象指向目录或指向目录的符号链接,则返回true;否则返回false。
bool isDir() const
2.如果该对象指向文件或指向文件的符号链接,则返回true。如果对象指向的不是文件,比如目录,则返回false。
bool isFile() const
3.如果这是一个“隐藏”文件,则返回true;否则返回false。
bool isHidden() const
4.如果该对象指向符号链接,则返回true;否则返回false。
bool isSymLink() const
5.返回符号链接指向的文件或目录的绝对路径,如果对象不是符号链接,则返回空字符串。
QString symLinkTarget() const
6.返回文件的后缀(扩展名)。
QString suffix() const
7.返回文件的完整后缀(扩展名)。
QString completeSuffix() const
8.返回文件的名称(不包括路径)。
QString fileName() const
9.返回文件的基本名称,不包含路径。
QString baseName() const
10.返回文件名,包括路径(可以是绝对的或相对的)。
QString filePath() const
11.返回包含文件名的绝对路径。
QString absoluteFilePath() const
12.返回文件的路径。这不包括文件名。
QString path() const
13.以字节为单位返回文件大小。如果文件不存在或无法获取,则返回0。
qint64 size() const
14.返回文件创建/生成的日期和时间。
QDateTime birthTime() const
15.返回文件最后修改的日期和本地时间。
QDateTime lastModified() const
volatile关键字
volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;如果不使用valatile,则编译器将对所声明的语句进行优化。(简洁的说就是:volatile关键词影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错)